遍历列表时出现 C 段错误

标签 c list pointers while-loop segmentation-fault

这是我的列表结构:

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 数据成员,因此出现段错误。

关于遍历列表时出现 C 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39628680/

相关文章:

c - 如果 (memcmp (版本, "\x0\x0\x0", 3) == 0 )

c - 如何从tree-sitter中的节点获取值?

c - 在一个字节中,如何将高 4 位与其低 4 位交换

Python:如何创建包含字典键和值对的列表

c - 从函数返回指向链表节点的指针

c - 为什么地址运算符 (&) 对于通过函数传递的数组很重要?

c - 在 C 中均值为零

python - 如何找出列表是否包含任何字母

c++ - 共享列表、多个条件、一个或多个条件变量?

c++ - 正确初始化指针映射 - map<p*, p*>