如何在没有缓冲区溢出的情况下遍历链表?

How to iterate through a linked list without buffer overflow?

我写了

while (ptr->next != NULL) {
        //code here
        ptr = ptr->next;
    }

并且 AddressSanitizer 抛出堆缓冲区溢出错误。

我加了

if (ptr->next != NULL) {
    while (ptr->next != NULL) {
        //code here
        ptr = ptr->next;
    }
}

希望它可能会避免读取未分配的地址,但现在 AddressSanitizer 正在用 SEGV 终止我的程序。我不太确定如何解决这个问题,因为我是 C 语言编程的新手,任何见解都会非常有帮助。谢谢!

你可以做到

while(ptr != NULL) {
  // code
  ptr = ptr->next;
}

甚至

for(type* i = ptr; i != NULL; i = i->next) {
  // code
}