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

为什么C语言用malloc申请的数组第三个元素是垃圾值而非0?

问题解答
  • C语言中malloc()的设计逻辑就是仅分配内存,不会做任何初始化操作,分配到的内存空间存储的是对应地址之前遗留的任意数据,读取未初始化的内存属于未定义行为,输出结果完全是随机的,没有固定规律。

你遇到的前两个元素为0、第三个为垃圾值的情况,只是当前运行环境下的巧合:本次程序运行时,malloc申请到的堆内存段,前两个int对应的地址刚好之前遗留值为0,第三个int对应的地址之前遗留的就是你看到的268744246这个数值,这个结果不具备可复现性,换运行环境、编译参数甚至同环境多次运行都可能得到不同的结果。

如果需要分配内存时默认初始化为全0,可以使用calloc函数替代malloc,对应分配语句修改为:

arr = (int*)calloc(3, sizeof(int));

另外注意动态申请的堆内存使用完毕后需要主动调用free(arr)释放,避免出现内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 08:54:05