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

HackerRank提交C++代码报ABORT CALLED错误,本地IDE运行正常求助

问题原因分析

这个问题完全由动态内存分配的语法错误导致,核心问题如下:

  • 你用来分配数组的语法写错了:int *ptr = new int(n); 中的圆括号代表你只申请了1个int类型的堆内存,且将该内存的值初始化为n,根本没有申请可容纳n个int的数组空间。正确的数组分配语法应该是用方括号:int *ptr = new int[n];
  • 后续你循环向ptr[i]写入数据的时候,从i=1开始就已经发生了堆内存越界,属于C++标准中的未定义行为:
    • 本地IDE运行环境的内存保护规则较松、或者测试时n的取值很小,越界访问的是未被占用的空闲内存,就不会立刻触发崩溃,看起来运行正常
    • HackerRank的评测环境内存校验机制更严格,或者测试用例的n取值更大,越界写入会触及受保护的内存区域,就会触发ABORT CALLED报错
修复方案

将动态内存分配行改为数组分配语法,同时补充数组内存释放的逻辑(虽然进程退出后系统会自动回收,但符合C++编码规范的写法需要主动释放):

#include <iostream>
using namespace std;

int main(){
    int n {0};
    cin >> n;
    // 修正:用方括号分配n个int的数组
    int *ptr = new int[n];
    for(int i =0; i <n ; i++) cin >> ptr[i];

    int begin =0, end = n-1;
    while(begin < end){
        swap(ptr[begin], ptr[end]);
        begin++;
        end--;
    }
    
    for(int i =0; i < n; i++) cout << ptr[i] << " ";
    // 补充:释放数组内存
    delete[] ptr;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:04