C语言 遍历链表时的分段错误



我正在尝试用C实现链表。我相信我正在正确创建和插入元素,但是每次我尝试循环时都会出现分段错误。这是我的链表代码:

struct node {
char **data;
struct node *next;
};

两个全局变量来存储指向头部和尾部的指针:

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 emptyn");
    }
    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的值无需初始化即可使用,因此它将调用未定义的行为。通过将int i;替换为int i = 0;来初始化i
  • curPointercurPointer = curPointer->next;中变得NULL时,取消引用curPointer curPointer->next != NULL有很大的几率导致分段错误。
    尝试使用curPointer != NULL而不是curPointer->next != NULL来治疗这种情况。

相关内容

  • 没有找到相关文章

最新更新