[英]C segfault when looping over a list
這是我的列表結構:
typedef struct Header {
struct Header* next;
char empty;
int storageSize;
} Header;
我正在遍歷一個列表來檢查它有多少元素:
int listSize(Header* _header) {
int count = 0;
while(_header->next) {
_header = _header->next;
++count;
}
return count;
}
到達列表末尾后出現段錯誤。 但是,如果我將其更改為:
int listSize(Header* _header) {
int count = 0;
while(_header->next) {
if(!_header->next) {
_header = _header->next;
++count;
}
else
break;
}
return count;
}
它沒有段錯誤,但它顯然也沒有正確計算元素。
改變這個:
while(_header->next) {
對此:
while(_header) {
因為你想遍歷你的列表,只要當前節點不是NULL
。
您正面臨分段錯誤,因為您試圖獲取NULL
的next
數據成員。
感覺就像您將空列表傳遞給listSize()
,即_header
為NULL
,並且您正在嘗試獲取NULL
的next
數據成員,因此出現分段錯誤。
你的邏輯不對。 代碼應該是這個 - 並注意注釋
int listSize(Header* header) {
int count = 0;
while (header) { // We have a node to count
++count; // Count it
header = header->next; // And move to the next node
}
return count;
}
在我看來,只要您想創建新節點,就可以將next
初始化為 0 或*next
為 0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.