我在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