C - 双重释放或损坏(快速顶部)



我的代码的以下部分在执行 * glibc 检测到 ./a.out 时给了我这个消息: 双重释放或损坏(快速顶部):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),但是如果没有更多细节,就无法分辨。

相关内容

  • 没有找到相关文章

最新更新