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

为何GDB运行C++代码退出码为134,Code::Blocks却正常?

问题原因分析

你的代码存在两处数组越界访问的问题,这是导致程序崩溃(exit code 134对应SIGABRT信号)的核心原因:

  • vector索引越界(初始化循环)
    C++的vector是0起始索引的容器,当你创建vector<long long>a(n);时,容器的有效索引范围是0到n-1。但你的第一个循环写的是:

    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    

    当i=n时,你访问了a[n],这超出了vector的有效内存范围,属于未定义行为——不同环境下表现不同,比如Code::Blocks没触发崩溃,但在线环境直接报错。

  • 循环中的越界访问(计算逻辑)
    第二个循环的条件是i<=n,步长为2:

    for(long long i=1;i<=n;i=i+2){
        s+=a[i]-a[i+1];
    }
    

    当i等于n时,代码会访问a[i+1]也就是a[n+1],这完全超出了vector的内存范围,直接触发内存错误,导致程序被系统终止,因此没有任何输出。

另外还有一个潜在问题:变量s没有初始化,它的初始值是随机的,即使程序不崩溃,计算结果也会不正确。

修复后的代码示例

#include <iostream>
#include <vector>

using namespace std;

int main(){
    long long n;
    cin>>n;
    vector<long long>a(n);
    
    // 从0开始遍历vector
    for(int i=0;i<n;i++){
        cin>>a[i];
    }

    long long s = 0; // 初始化s
    // 调整循环逻辑避免越界,按成对元素处理
    for(long long i=0;i < n-1;i=i+2){
        s+=a[i]-a[i+1];
    }

    cout<<s;
    
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:48:18