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

栈分配数组会自动零初始化吗?如何实现栈分配零初始化数组?

栈分配数组的零初始化问题

原问题中的栈数组是否自动零初始化?

不会。代码int myArray[5];声明的栈数组属于默认初始化,对于int这类内置基本类型,默认初始化不会为元素分配初始值,数组内的元素会是内存中的随机垃圾值。

如何声明栈分配的零初始化数组?

有几种可靠的方式:

  • 使用空初始化列表(C++03及以上版本均支持):
    int myArray[5] = {};
    
    这种写法会将数组的所有元素零初始化。
  • C++11及以后版本可省略等号,简化为:
    int myArray[5]{};
    
  • 若需兼容更老的C风格写法,也可使用memset(仅适用于POD类型,如int):
    int myArray[5];
    memset(myArray, 0, sizeof(myArray));
    
    注意:memset是按字节填充零,对于非POD类型(如包含自定义构造函数的类)可能引发未定义行为,因此优先推荐前两种初始化列表的方式。

关于堆分配数组的零初始化

你提到的int* myArray = new int[5]();是正确的堆数组零初始化方式,此处的()会触发值初始化,将所有int元素置零。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:44:53