You need to enable JavaScript to run this app. MinGW下C++查找首个重复元素代码编译成功但无法运行排查求助
优惠活动
大模型
产品
解决方案
定价
更多

MinGW下C++查找首个重复元素代码编译成功但无法运行排查求助

问题根因排查

1. 直接原因:栈溢出

你代码中定义了栈上数组int idx[N],其中N = 1e6 + 2,单个数组占用内存约为(10^6+2)*4Byte ≈ 4MB。
MinGW编译器的默认栈空间上限为1~2MB,大数组直接占满栈空间导致程序运行时崩溃。而onlinegdb等在线编译环境通常使用Linux内核,默认栈空间为8MB及以上,足以容纳该数组,因此可以正常运行。

2. 其他潜在不兼容问题

  • 可变长度数组int ar[n]属于C99特性,从未被纳入C++标准,仅作为部分编译器的扩展支持,兼容性差,容易出现未定义行为。
  • 未做输入边界校验:如果输入的数组元素值超过1e6+1,会发生idx数组越界访问,导致运行异常。
修复方案

推荐采用以下任意一种方式解决栈溢出问题,同时优化代码兼容性:

  • 方案1:将大数组移到全局作用域,全局变量存储在堆区,不受栈空间限制
const int N = 1e6 + 2;
int idx[N]; // 移到main函数外

int main() {
    // 原有逻辑
}
  • 方案2:使用STL容器替代原生数组,vector默认在堆区分配内存
// 替换int ar[n]为
vector<int> ar(n);
// 替换int idx[N]和初始化循环为
vector<int> idx(N, -1);
  • 方案3(不推荐):编译时添加参数手动扩大栈空间,编译指令增加-Wl,--stack=10485760可将栈上限设为10MB

修改后运行测试用例,输入7再输入1 5 3 4 3 5 6,可正常输出预期结果2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 23:45:02