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
相关产品推荐
相关产品推荐

