【发布时间】:2016-09-08 04:43:55
【问题描述】:
完整代码在这里:https://gist.github.com/IamSlightly/5debd2373231a62c0a44665902e9ca7f
不确定为什么会发生这种情况,但是当 printf 尝试访问返回值时,它发生在第 43 行。
struct node* kv = Lookup (13);
if (kv)
printf ("%s\n", kv->val_ptr);
struct node* Lookup(int x){
struct node *holder;
holder = head;
while ((holder->key!=x) && (holder->next!=NULL)){
holder = holder->next;
}
if (holder->key==x) {
printf("\nlets try this shit again\n");
return holder;
} else {
printf("\n*** %d is not in the linked_list ***\n", x);
return NULL;
}
}
【问题讨论】:
-
kv->val_ptr的值是多少? -
使用调试器单步调试代码,查看失败时变量的值。
-
尝试在你的头文件中包含一些函数原型。现在
main.c正在拉入linked_list.h,其中包含结构定义,但不 包含Insert、Lookup等的原型。因此,所有这些函数都需要关于返回int并带有可变参数列表的函数的隐式声明。我愿意打赌您的构建/运行装备int和struct node *的大小不相同。因此int Lookup()正在返回一些东西,但它肯定不是一个有效的指针。顺便说一句,您应该会收到大量关于此的警告。 -
我不敢相信我没有这样做
-
@plzhelpme 可能会更糟。您可以在完全掩盖该问题的 32 位平台上运行/测试它,认为生活很美好,然后在 64 位平台上进行一些专业测试并见证您的成绩坦克。
标签: c linked-list segmentation-fault nodes