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

C++ Codeforces代码未读取输入就终止运行的问题排查

问题根因
  • 栈空间溢出是程序未读取输入就直接终止的核心原因:你将三个大小为1e7+5的int数组seive、sum、count声明为main函数内的局部变量,存储在进程栈区。按每个int占4字节计算,三个数组总占用内存约120MB,远大于操作系统默认的1~8MB栈空间上限,程序进入main函数时分配栈空间失败直接触发崩溃,还未执行到输入读取逻辑就终止运行。
修复方法
  1. 将三个大数组移到全局作用域:全局变量存储在进程静态存储区,不受栈空间限制,只要系统内存充足即可正常分配。
  2. 也可以改用vector<int>声明三个数组,vector的底层数据存储在堆区,同样不会占用栈空间。
其他需要修正的逻辑错误
  • memset(seive,1,sizeof(seive))的写法不符合预期:memset是按字节赋值,int类型占4字节时,每个seive元素最终会被赋值为0x01010101(十进制16843009),后续判断seive[i]==1的条件永远不会成立。你可以将seive改为bool类型数组(单个元素占1字节),或者改用循环给数组元素赋值为1。
  • 查询逻辑中缺少l、r的输入语句:while(m--)分支内只声明了int l,r,没有写cin >> l >> r的输入逻辑,修复栈溢出问题后需要补充该代码。
  • 代码中的int arr[n]是C风格变长数组,不属于标准C++语法,部分编译器不支持该写法,建议替换为vector<int> arr(n)。
  • 边界判断存在越界风险:当l=1时,sum[l-1]会访问sum[0],你的代码中只从i=2开始更新sum数组,需要补充sum[0]、sum[1]的初始值处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:15:03