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

调用malloc(sizeof(x))时会自动使用x初始化已分配内存吗?

结论

tmp = malloc(sizeof(x)); 的效果完全不等同于 tmp = malloc(sizeof(x)); *tmp = x;,malloc仅完成内存分配操作,不会自动初始化申请到的内存,初始化工作必须由开发者自行完成。

malloc的具体行为规则

  • 调用malloc申请内存时,函数仅负责在堆区开辟指定大小的连续内存空间,返回指向该空间起始位置的指针,不会对内存里的原有数据做任何修改。
  • 新申请到的内存块中存储的是未定义的垃圾值(本质是这块内存之前被使用时残留的数据),直接读取解引用后的指针值属于未定义行为,结果不可预测。
  • 如果需要让新申请的内存存储变量x的值,必须手动执行*tmp = x;完成赋值,不存在自动拷贝初始化的逻辑。

注意区分和其他内存分配函数的差异:calloc虽然会在分配内存后自动将所有字节置0,但同样不会自动写入你指定的自定义变量值;realloc调整内存大小后,新增的内存区域内容同样是未定义的垃圾值。

常见误区说明

部分开发者偶尔会遇到“没手动赋值,*tmp的值刚好和x一致”的情况,这只是新申请到的内存块残留数据刚好和x的字节内容重合,属于极小概率的巧合,绝对不能依赖这种行为写代码,否则程序在不同环境、不同运行状态下会出现难以排查的随机bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:09:30