c-malloc上的链接列表程序崩溃



我对C和编码还很陌生,所以请耐心等待。我最近一直在尝试实现一个链表,这是我提出的代码

typedef struct something{
int data;
struct something *next;
} thing ;
int main ()
{
thing *head, *current;
head=malloc(sizeof(thing));
puts("head=malloc(sizeof(thing));");
if (head != NULL)
puts("malloc success");
head=NULL;
current=head;
puts("current=head;");
if (current == NULL)
puts("current is NULL");

puts("while");
while (current!=NULL)
{
current = current->next;
}
puts("end while");

current->next=malloc(sizeof(thing));
puts("current->next=malloc(sizeof(thing));");
//free at end of program
}

虽然编译器显示0个错误,但当我运行程序时,它只运行到崩溃前的最后一个malloc部分。它没有运行最终的puts,所以我认为这与我尝试使用malloc的方式有关。如果有人告诉我我做错了什么,我会非常感激的。

问题是您的while循环走得太远了。你想在current指向列表的最后一个元素时停止,这样你就可以添加到列表中。但你要更进一步,在current == NULL时停止。那么分配给current->next就太晚了。

首先,您需要将head->next初始化为NULL。

head = malloc(sizeof(thing));
head->next = NULL;

摆脱线路:

head = NULL;

因为这是在重写CCD_ 8的结果。

然后while循环需要测试current->next,而不是current本身:

while (current->next != NULL) {
current = current->next;
}

添加新节点时,还必须将其next指针设置为NULL

current->next = malloc(sizeof(thing));
current->next->next = NULL;

这些应该可以解决你的问题。

分配head,然后在几次检查后立即将其指针指向NULL

// Allocation here
head=malloc(sizeof(thing));
puts("head=malloc(sizeof(thing));");
// Not a null 
if (head != NULL)
puts("malloc success");
// Point to NULL again ???
head=NULL;

然后你的current再次指向head,即NULL,使currentNULL

current=head;
puts("current=head;");
if (current == NULL)
puts("current is NULL");

然后取消引用current并尝试使用malloc

puts("while");
while (current!=NULL)
{
current = current->next;
}
puts("end while");

current->next=malloc(sizeof(thing)); //current is NULL here NULL->next is invalid
puts("current->next=malloc(sizeof(thing));");

相关内容

  • 没有找到相关文章

最新更新