我试图在C语言中实现一个链表,我相信我创建和插入的元素是正确的,但是每次尝试循环时都会出现分段错误。这是我的链接列表代码:
struct node {
char **data;
struct node *next;
};
两个全局变量用于存储指向head和tail的指针:
struct node *head;
struct node *tail;
插入元素的代码:
void insert(char **args)
{
struct node* pointer = (struct node*)malloc(sizeof(struct node));
pointer -> data = args;
pointer -> next = NULL;
if( head == NULL ) {
head = pointer;
tail = pointer;
}
else {
tail -> next = pointer;
tail = pointer;
}
}
然后,我尝试遍历列表并打印数据内容(这将成功打印列表中的元素,但随后出现分段错误):
int print_list(char **args)
{
struct node *curPointer = head;
if(curPointer == NULL) {
printf("%s", "List is empty\n");
}
else {
printf("%s", "List: ");
do {
int i;
while(curPointer->data[i] != NULL) {
printf("%s", tail->data[i]);
i++;
}
printf("%s", "\n");
curPointer = curPointer->next;
}while(curPointer->next != NULL);
}
return 1;
}
我的程序中其他依赖于循环列表的函数也有类似的分段错误问题。
最佳答案
具有自动存储持续时间的局部变量i
的值在没有初始化的情况下使用,因此它将调用未定义的行为。通过将i
替换为int i;
来初始化int i = 0;
当curPointer
在NULL
中变为curPointer = curPointer->next;
时,在curPointer
条件下解引用curPointer->next != NULL
有很大的机会导致分割错误。
尝试使用curPointer != NULL
而不是curPointer->next != NULL
作为条件。
关于c - 遍历链接列表时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35880357/