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

C语言int指针p自增后解引用*p输出异常原因求解

你遇到的*p输出异常值的问题本质是非法内存访问触发的C语言未定义行为,具体原因如下:

  • 你只给int a申请了1个int长度的栈内存,初始状态下指针p合法指向这块内存,所以第一次访问*p能正确拿到a的值3。
  • 执行p = p + 1时,int类型指针会按其指向的类型长度做偏移:32位int占4字节,所以地址值加4和你的观察完全一致。但偏移后的p指向的是a变量相邻的内存区域,这块内存你没有申请过,也没有做过赋值操作,里面存储的是程序运行过程中残留的随机垃圾值。
  • 额外需要注意的代码问题:你打印指针地址时用的%d格式符是错误的,打印内存地址应该使用%p格式符,该写法本身也属于未定义行为,只是在你的运行环境中没有触发崩溃而已。

访问未被程序合法申请的内存是C标准明确规定的未定义行为,运行结果完全不确定:可能输出随机垃圾值、可能直接触发段错误崩溃,也可能在某些环境下看似输出正常值,完全取决于运行时对应内存地址上刚好存储的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 02:24:02