c编程链表编译但是segfault



代码可以在这里找到https://pastebin.com/DuxzjSsr

我用gcc-g编译并在gdb中运行,它说segfault发生在

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

我不明白为什么,我从这个链接复制了代码https://www.learn-c.org/en/Linked_lists用于打印出链接列表等,并且据我所知,代码几乎相同。

在您的代码中,您永远不会正确初始化next。因此,该值很可能是";垃圾";内存中剩余的数据。在这里创建一个clist变量,并且仅设置data属性:

clist mylist;
mylist.data = "First string";

问题是您不执行mylist.next = NULL;,所以发生在该位置的任何内容都仍然存在,并且您的代码将尝试在列表迭代current = current->next中将该值分配给current。这可能会导致segfault。您试图访问任意位置的内存,结果是未定义的行为。根据经验,始终初始化指针或将其值分配给NULL

首先,初始化列表的头是错误的。除了数据成员,还应该初始化下一个指针,这样它就不会指向某个垃圾值。当您的打印函数读取该指针(或任何其他函数(时,它将崩溃。

将此添加到您的主

mylist.next = NULL;

此外,插入您的数据也有相同的错误(第34-35行(

current->next = (clist *)malloc(sizeof(clist));
current->next->data = strtoadd;

这条线将完成数据插入的技巧

current->next->data->next = NULL;

相关内容

  • 没有找到相关文章

最新更新