簡體   English   中英

循環遍歷列表時出現 C 段錯誤

[英]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

您正面臨分段錯誤,因為您試圖獲取NULLnext數據成員。

感覺就像您將空列表傳遞給listSize() ,即_headerNULL ,並且您正在嘗試獲取NULLnext數據成員,因此出現分段錯誤。

你的邏輯不對。 代碼應該是這個 - 並注意注釋

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM