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

循环判断时触发nullptr读取访问违规,为何检查仍报错?

问题分析与修复方案

嘿,我一眼就看出问题啦——你把while循环里的条件判断顺序搞反了,这才导致了空指针访问错误!

咱们来拆解一下:C++里的&&运算符是短路求值的,意思是只有左边的表达式为真的时候,才会去计算右边的表达式。你现在写的是:

while (current->next->data <= temp->data && current->next != nullptr)

程序会先尝试访问current->next->data,但如果这时候current->next已经是nullptr了,你去访问它的data成员,就相当于去摸一个不存在的东西,肯定会触发内存访问违规啊!后面的current->next != nullptr判断根本没机会执行,因为前面已经崩了。

打个简单的比方:你想确认“邻居家的孩子年龄比我家的小,而且邻居家有孩子”,你总不能先去问邻居家孩子的年龄(万一邻居家根本没孩子呢?),得先确认邻居家有孩子,再去问年龄对吧?

所以正确的做法是把条件顺序反过来,先检查指针是否有效,再访问它的成员:

while (current->next != nullptr && current->next->data <= temp->data) { 
    current = current->next; 
}

这样一来,程序会先判断current->next是不是nullptr,如果是,直接跳过右边的判断,循环终止;如果不是,再去比较data的值,完全避免了空指针访问的问题。

内容的提问来源于stack exchange,提问作者dustin smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:31:44