问题描述
我的代码的以下部分在执行 * glibc 检测到 时给了我这个消息./a.out: double free or corruption (fasttop): 0x08e065d0 **
The following section of my code gives me this messege when executing * glibc detected ./a.out: double free or corruption (fasttop): 0x08e065d0 **
我已经多次阅读代码,但我无法清楚地看到我是如何滥用free (temp2)
i have gone through the code many times but i cant clealry see how i am misusing the 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);
}
推荐答案
问题出在这里:
temp2=first;
基本上,当你释放 temp2 时,你首先释放,而不是这里分配的内存:
Basically, when you free temp2, you free first, not the memory allocated here:
temp2=(NODE *)malloc(sizeof(NODE));
,这仍然是内存泄漏,因为在分配之后它不能再被释放.
, which remains a memory leak, because after the assignment it can't be freed anymore.
此外,您的代码可能还有一些问题(一个是您不应该在输入流上使用 fflush
),但如果没有更多详细信息,则无法判断.
Also, your code has probably some more problems (one is that you shouldn't use fflush
on an input stream), but without some more details, it's impossible to tell.
这篇关于双自由或腐败(fasttop)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!