Wiem co, ale nie potrafię zrozumieć dlaczego, podmiana wskaźnika wywala program i jak to ominąć, by zwolnić nadmiarowa pamięć.
Otrzymuję komunikat [w tym programie]
free(): double free detected in tcache 2
Program received signal SIGABRT, Aborted.
__pthread_kill_implementation (no_tid=0, signo=6, threadid=140737348187968) at ./nptl/pthread_kill.c:44
44 ./nptl/pthread_kill.c: No such file or directory.
tak jakby podwójne wywołanie destruktora.
bignum::~bignum() {
if(ptrlgnr)
delete[]ptrlgnr;
// o("usuniento")
}
powodem jest funkcja
void bignum::realloc(char * old,const size_t & newsize) {
if(!old)
throw std::bad_alloc();
char* newone=nullptr;
newone=new char[newsize+1] {};
if(newone)
for(size_t i=0; i<newsize; i++)
newone[i]=old[i];
else
throw std::bad_alloc(); // jeżeli nie udała się rezerwacja pamięci.
delete [] old;
old=newone;
newone=nullptr;
return;