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

C++创建100万元素int数组出现内存错误的解决方法

解决栈溢出导致的程序崩溃问题

你遇到的错误码 -1073741571 对应Windows平台的STATUS_STACK_OVERFLOW(栈溢出),核心原因是:
你在main函数中定义的数组是局部变量,默认会被分配到程序的栈内存中,而Visual Studio默认给Windows程序分配的栈空间仅约1MB。100万个int类型元素(每个int占4字节)总共需要4MB内存,远超栈的可用容量;而10万个int仅占400KB,在栈的承载范围内,所以能正常运行。

解决方法:

  • 改用堆内存分配:堆内存的可用空间远大于栈,适合存储大体积数据,记得手动释放或用智能指针自动管理:

    // 用new/delete手动管理
    int* a = new int[1000000]{1, 2};
    // 使用数组...
    delete[] a; // 必须释放,避免内存泄漏
    

    更安全的方式是用智能指针,无需手动释放:

    #include <memory>
    
    int main()
    {
        std::unique_ptr<int[]> a = std::make_unique<int[]>(1000000);
        a[0] = 1;
        a[1] = 2;
        // 智能指针会在生命周期结束时自动释放内存
        return 0;
    }
    
  • 使用全局/静态变量:全局变量或static局部变量会被分配到全局存储区,该区域不受栈大小限制:

    // 全局数组,定义在main函数外
    int a[1000000] = {1, 2};
    
    int main()
    {
        return 0;
    }
    

    或者在函数内声明为静态局部变量:

    int main()
    {
        static int a[1000000] = {1, 2};
        return 0;
    }
    
  • 调整Visual Studio栈大小:如果坚持要在栈上使用大数组,可以修改项目的栈容量设置:

    1. 右键项目 → 属性 → 链接器 → 系统
    2. 找到「堆栈大小」选项,将默认值(通常为1048576,即1MB)修改为足够容纳数组的数值(比如4194304,即4MB)
      注意:栈过大可能会占用过多系统资源,不建议随意设置过大值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:01:09