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
相关产品推荐
相关产品推荐

