gpt4 book ai didi

c - 双自由或腐败(fasttop)

转载 作者:太空狗 更新时间:2023-10-29 16:35:51 24 4
gpt4 key购买 nike

我的代码的以下部分在执行 * glibc detected ./a.out: double free or corruption (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);
}

最佳答案

问题出在这里:

        temp2=first;

基本上,当您释放 temp2 时,您首先释放,而不是此处分配的内存:

        temp2=(NODE *)malloc(sizeof(NODE));

,这仍然是一个内存泄漏,因为在分配之后它不能再被释放。

此外,您的代码可能还有一些问题(一个是您不应该在输入流上使用 fflush),但如果没有更多细节,则无法判断。

关于c - 双自由或腐败(fasttop),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20019512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com