Двойная свобода или коррупция (fasttop)
Следующий раздел моего кода дает мне этот messege при выполнении * обнаруженного glibc./a.out: double free или corrupt (fasttop): 0x08e065d0 **
Я много раз просматривал код, но я не могу сказать, как я злоупотребляю free (temp2)
bool found= false;
int x=0;
for ( x=0; x<=312500; x++)
{
while (count <=32)
{
fscanf (file, "%d", &temp->num);
temp->ptr=NULL;
newNode = (NODE *)malloc(sizeof(NODE));
newNode->num=temp->num;
newNode->ptr=NULL;
if (first != NULL)
{
temp2=(NODE *)malloc(sizeof(NODE));
temp2=first;
while (temp2 != NULL && !found)
{
if (temp2->num == newNode->num)
{found=true;}
temp2= temp2->ptr;
}
free(temp2);
if (!found)
{
last->ptr=newNode;
last=newNode;
count=count+1;
}
}
else
{
first = newNode;
last = newNode;
count=count+1;
}
fflush(stdin);
}
Ответы
Ответ 1
Проблема здесь:
temp2=first;
В принципе, когда вы освобождаете temp2, сначала освобождаете, а не выделенную здесь память:
temp2=(NODE *)malloc(sizeof(NODE));
который остается утечкой памяти, потому что после назначения он больше не может быть освобожден.
Кроме того, у вашего кода, вероятно, есть еще несколько проблем (один из них заключается в том, что вы не должны использовать fflush
для входного потока), но без каких-либо дополнительных деталей это невозможно сказать.