【发布时间】:2011-01-08 07:49:46
【问题描述】:
我明白了:
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]) 时,出现分段错误。
发生了什么事?
【问题讨论】:
-
你是不是和 jmh86 同班:stackoverflow.com/questions/2106691/…?或者可能不是。您提出问题并在第一行询问
INTLIST,但其余代码使用LLIST,您还没有向我们展示其中任何一个是如何构建的。请提供更多细节。 -
此外,使用调试器运行以查看它在哪一行出现故障总是值得的。 (使用 gcc 编译和链接时使用
-g,在类 unix 环境中使用gdb programname。) -
抱歉之间的混淆。它应该是 LLIST,而不是 INTLIST。
-
最后,通常这样标记作业,不是因为作业问题有什么问题,而是因为它可以帮助我们猜测您需要什么样的帮助。
标签: c arrays pointers linked-list