我正在尝试在 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
是一个全局变量,应尽可能避免。将其作为参数传递给列表函数,并使此变量非全局变量是一种更好的方法。如果你愿意,看看这个列表的代码,它是完全注释的,是我曾经学习过的。
我是否施放了马洛克的结果?不!