我在C中做了一个基本的LinkedList,我有创建,添加和工作。除了在看似随机数量的获取调用(第96次调用失败,列表中包含94个元素)之后得到一个段错误,访问当前节点上的下一个指针会导致段错误。C - Segfault当访问非空指针的成员结构
此行导致段错误while(cur->next != null && i < index)
我已检查并且在发生段错误之前cur没有返回空内存地址。它也崩溃在第二个循环的崩溃它(第二个printf只输出0)。 这是整个get函数
void *linkedList_get(LinkedList list, int index)
{
Node *cur = list.head;
int i = 0;
if(index != 0)
{
while(cur->next != null && i < index)
{
cur = cur->next;
printf("I %i\n", i);
printf("%i\n", cur);
i++;
}
}
if(index == i)
return cur->data;
return null;
}
这是节点结构
typedef struct
{
void *data;
struct Node *next;
struct Node *prev;
} Node;
这是如果需要http://pastebin.com/hpWA8tb8整个代码(注意,这是我的第一个C程序,所以它可能是一个有点草率和我不释放任何内存)
可能不是你的bug的来源,但你应该修改你的上面的函数来检查以确保list.head在取消引用cur-> next之前不是NULL。 – selbie
如果您在调试器下运行该程序,发生段错误时调用堆栈会是什么样子? –
我在使用Code :: Blocks和Mingw32时出于某种原因调试器拒绝工作,这已经调试了我作为初学C程序员非常难以调试的许多段错误。 – UberMouse