如何使用LLIST * mylist [N];

时间:2010-01-22 17:55:19

标签: c arrays pointers linked-list

我明白了:

LLIST *mylist[N];

其中N是输入文件的行数。然后mylist[i]是指向第i个链表的指针。

我调用一个函数

LLIST *list_add(LLIST **p, int i){
    LLIST *n;

    n = (LLIST *) malloc(sizeof(LLIST));

    if (n == NULL)
        return NULL;

    n->next = *p; /* the previous element (*p) now becomes the "next" element */
    *p = n;       /* add new empty element to the front (head) of the list */
    n->data = i;
    return p;
}

所以在我的主要内容我说的是

LLIST *mylist[N];
list_add(&mylist[0],1);
list_add(&mylist[0],2);
list_add(&mylist[1],3)
list_add(&mylist[1],4);
list_print(mylist[0]); // Print mylist[0]
list_print(mylist[1]); // Print mylist[1]

我的Print_list功能是:

Void *list_print(LLIST *n) {
    if (n == NULL){ 
        printf("list is empty\n");
    }

    while (n != NULL){
        printf("%d",n->data); 
        n = n->next;
    }
}

当我执行list_print(mylist[0])时,会打印出2 1

当我list_print(mylist[1])时,我遇到了分段错误。

发生了什么事?

2 个答案:

答案 0 :(得分:1)

您似乎没有初始化mylist数组的内容,它可能包含指向随机内存位置的值。当只添加新元素时无关紧要,在开头插入新元素,从不访问无效指针。但是当您尝试打印列表时,打印功能将跟随列表末尾的无效指针并产生分段错误。

为避免这种情况,请在数组声明中添加初始值设定项:

LLIST *mylist[N] = {NULL};

这会将mylist的所有元素设置为NULL

答案 1 :(得分:0)

这确实有效LLIST * mylist [10] = {NULL}; 但如果我想这样做,我会得到错误:

X = 10;  LLIST * mylist [x] = {NULL};