当我使用 free() 时,C 中的程序会进入无限循环



我正在尝试在 c 中创建一个链表程序,其中我使用 malloc(( 动态分配内存,然后当我尝试在函数末尾使用 free(( 时,程序运行到无限循环中。

为什么会这样?

void Insert(int x, int pos)
{
    struct Node *newnode = (struct Node*) malloc(sizeof(struct Node));
    newnode->data = x;
    newnode->next = NULL;
    struct Node* temp, *left, *right;
    int i = 1;
    temp = head;
    if(head == NULL)
    {
        head = newnode;
    }
    else{
        while(i != pos - 1)
        {
            temp = temp->next;
            i++;
        }
        newnode->next = temp->next;
        temp->next = newnode;
    }
    free(newnode);
}

您在错误的位置使用了free(),导致删除列表中新插入的节点。

我应该使用 free(( 吗?

是的,因为您正在使用malloc().您动态分配的内存应由您取消分配,否则会发生内存泄漏。

那么我应该在哪里使用 free(( 呢?

代替您的代码,您不再需要您的列表。例如,在main()结束时。


不相关,但通过查看您的insert(),我可以看到head是一个全局变量,应尽可能避免。将其作为参数传递给列表函数,并使此变量非全局变量是一种更好的方法。如果你愿意,看看这个列表的代码,它是完全注释的,是我曾经学习过的。


我是否施放了马洛克的结果?不!

相关内容

  • 没有找到相关文章

最新更新