You need to enable JavaScript to run this app. C++代码数组大小≥800时本地无输出 在线编译器运行正常
优惠活动
大模型
产品
解决方案
定价
更多

C++代码数组大小≥800时本地无输出 在线编译器运行正常

问题根本原因

你遇到的问题是栈溢出,具体原因如下:

  • 你在main函数内部定义了两个大小为805*805的int类型二维数组:n_arr和k_arr
  • 单个数组占用内存计算:805 * 805 * 4字节(单int大小) ≈ 2.47MB,两个数组合计占用约5MB栈空间
  • 主流本地编译器默认栈空间上限很低:Windows环境下默认栈大小仅为1MB,Linux/macOS默认栈大小通常也只有2MB~8MB,不足以容纳两个大数组,程序运行时直接栈溢出崩溃,因此无输出
  • 在线编译器的栈空间限制普遍更宽松(或默认分配更大的栈空间),因此代码可以正常运行

修复方案

方案1(最推荐):将大数组移到全局作用域

全局变量存储在静态存储区,不占用栈空间,修改后代码即可正常运行,示例修改点:

#include<bits/stdc++.h>
using namespace std;

#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL);
#define M 1000000007
#define N 805
#define ll long long int

// 将两个大数组移到全局作用域
int n_arr[N][N];
int k_arr[N][N];

void init_start(){
    fast_io;
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
}

int main()
{
    // 删除main内的原数组定义即可,其余代码保持不变
    init_start();
    int n, k, limi;
    cin>>n>>k;
    // 剩余原有逻辑不变

方案2:使用堆上分配的容器替代栈上数组

用STL的vector容器存储数组,vector的底层内存分配在堆上,不会占用栈空间:

// main函数内将原数组定义替换为如下代码即可
vector<vector<int>> n_arr(N, vector<int>(N));
vector<vector<int>> k_arr(N, vector<int>(N));

方案3(不推荐):修改本地编译器栈大小配置

可以通过编译参数手动增大栈空间上限,但该方案移植性差,更换编译环境就会失效,不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:06:09