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

C++链表程序输出的额外奇怪数字是什么?是否为内存地址?

异常输出数字的含义解释

你输出的奇怪数字不是内存地址,属于未定义行为产生的栈垃圾值,具体成因如下:

  • C++中没有自定义构造函数的类,在声明栈上非静态局部实例时,未被手动赋值的成员会保留对应内存空间的原有残留数据。你的node类没有构造函数,third.next没有被手动赋值为NULL,所以它的取值是完全随机的野指针
  • PrintList的循环终止条件是n != NULL,由于third.next是随机野指针,只要它的值不等于0,循环就会继续执行,尝试将该野指针指向的内存空间当作node对象读取data成员,你看到的1963060099就是这块随机内存地址上存储的残留数据。

这种行为属于C++标准定义的未定义行为,实际运行结果完全不确定:运气好时输出随机数字,运气差时会因为访问非法内存直接触发程序崩溃。

规避方案

除了手动给尾节点的next赋值NULL之外,更稳妥的做法是给node类添加默认构造函数,从根源避免野指针问题:

class node
{
    public:
    node() : data(0), next(NULL) {}
    int data; //the datum
    node *next; //a pointer pointing to node data type
};

内容的提问来源于stack exchange,提问作者Kanishk Mewal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:27:04