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

C++对指针传引用后解引用出现随机值的原因是什么?

问题原因解答

你遇到的是典型的**悬垂指针(野指针)**导致的未定义行为,具体原因如下:

  • 函数myMethod中定义的t是局部自动变量,存储在程序的栈内存中,它的生命周期仅局限于myMethod的运行阶段:一旦myMethod执行结束退出,对应的栈帧会被系统回收销毁,t占用的内存空间会被标记为空闲可复用,原有存储的数值不再受保护。
  • 你在函数内部将t的地址赋值给了外部传入的指针引用x,相当于直接修改了main函数中py的指向,让它指向了即将被释放的栈内存地址。
  • 当回到main函数再次解引用py时,原来t对应的内存可能已经被其他栈操作覆盖写入了新的内容,因此读取到的是不确定的随机值,这种操作本身属于C++标准规定的未定义行为,极端情况下还会直接导致程序崩溃。

如果要实现预期的输出,可选择以下修正方案:

  • 把t声明为静态局部变量:static int t = 4;,静态变量的生命周期会持续到程序结束,不会随函数退出销毁。
  • 改用堆内存存储目标值:int* pt = new int(4;,堆内存需要手动delete释放,不会随函数退出自动回收。
  • 避免将局部变量的地址传出函数,改为修改指针指向的地址存储的值,而非修改指针本身的指向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:45:01