链表实现分段错误

时间:2015-03-18 09:30:06

标签: c pointers linked-list

我已经完成了链接列表的基本实现,但是在取消注释注释行时它给出了Segmentation错误,否则它的工作正常。 我无法理解为什么它会给出错误。 请给我一些帮助

void insert(Node **head, Symbol sym) {
    Node *temp, *p = *head;;
    Symbol a = sym;
    temp = (Node *)malloc(sizeof(Node));
    temp->value = a;
    temp->next = NULL;

    if (p == NULL)
        *head = temp;
    else {
        while (p->next != NULL)
            p = p->next;
        p->next = temp;
    }
}

void printList(Node *head) {
    Node *p = head;
    if(p == NULL) return;
    while (p != NULL) {
        printf("%d ", p->value);
        p = p->next;
    }
    printf("\n");
}
int main() {
    Node *List, *list2;
    insert(&List, 0);
    insert(&List, 1);

    //insert(&list2, 2);
    //insert(&list2, 3);

    printList(List);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

您没有初始化节点的初始指针

Node *List, *list2;

Node *List = NULL, *list2 = NULL;

考虑到您展示的程序中未使用变量list2

编写函数insert的另一种方法是以下

void insert( Node **head, Symbol sym ) 
{
    Node *temp = malloc( sizeof( Node ) );

    if ( temp != NULL )
    {
        temp->value = sym;
        temp->next  = NULL;

        while ( *head ) head = &( *head )->next;
        *head = temp;
    }
}