gpt4 book ai didi

c - 如何使用 LLIST *mylist[N];

转载 作者:太空宇宙 更新时间:2023-11-04 04:08:56 25 4
gpt4 key购买 nike

我明白了:

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;
}

所以在我的 Main 中我会说类似的话

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]) 时,出现段错误。

这是怎么回事?

最佳答案

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

为避免这种情况,在数组声明中添加一个初始化器:

LLIST *mylist[N] = {NULL};

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

关于c - 如何使用 LLIST *mylist[N];,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2119329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com