You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++链表打印时触发空指针运行时错误的问题咨询

C++链表打印时触发空指针运行时错误的问题咨询

嗨,我来帮你拆解一下这个问题的根源~

首先来看你能正常运行的那段循环代码:

while (head!= NULL) { 
    cout << head->data; 
    head= head->next; 
}

这段代码的核心安全点在于每次访问head->data之前,都先做了head != NULL的检查——只有当head不是空指针的时候,才会执行打印和移动指针的操作。哪怕链表是空的(head一开始就是NULL),或者遍历到最后一个节点之后,循环都会及时终止,不会去碰空指针的成员。

而你手动写的这段代码就没有做这种安全检查:

cout << head->data; 
head= head->next; 
cout << head->data << endl;

问题出在:如果你的链表节点数量小于2(比如只有1个节点,甚至是空链表),第一次执行head = head->next之后,head就会变成NULL。这时候你再去执行cout << head->data,就相当于对一个空指针进行解引用操作,这在C++里是未定义行为,直接触发了LeetCode的UndefinedBehaviorSanitizer报错——也就是你看到的那个运行时错误。

举个具体的例子:假设你的链表只有一个节点[10],第一次打印10后,head被赋值为这个节点的next(也就是NULL),接下来你试图访问NULL->data,这就直接踩了空指针的坑。

如果一定要手动打印而不用循环,那每次访问head之前都必须加判空检查,比如改成这样:

if (head != nullptr) {
    cout << head->data;
    head = head->next;
    if (head != nullptr) {
        cout << head->data << endl;
    }
}

不过更推荐你用一开始的循环写法,它能适配任意长度的链表(空链表、1个节点、N个节点都能安全处理),不用每次都手动加一堆判断,代码也更简洁健壮。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 10:23:01