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

为何free()函数会影响动态分配数组前4个元素的值?

关于C语言free后访问原指针的问题解答

这和Windows 10系统、GCC编译器完全无关,核心原因是你触发了C语言标准中明确的未定义行为。

具体来说:

  • 调用free(save)后,操作系统会回收这块内存,将其标记为可被重新分配的空闲区域。此时save成为野指针,它指向的内存空间已经不再属于你的程序。
  • 后续通过save访问该内存时,得到的结果完全不可预测——可能残留旧数据,可能是随机值,甚至可能直接引发程序崩溃。你在多个环境测试得到的随机值,正是未定义行为的典型表现。
  • 无论你用calloc分配、realloc扩容,只要执行了free,就绝对不能再通过原指针访问对应内存,这是C语言内存管理的基本规则,和具体编译器、操作系统无关。

正确的处理方式:

  • 若需要保留数据,必须在调用free()之前,将数据复制到其他有效内存区域(比如另一个动态分配的数组、栈上的数组)。
  • 调用free()后,应立即将指针置为NULL,避免后续误操作访问野指针。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:54:56