【问题标题】:Showing Runtime ErrorAbort signal from abort(3) (SIGABRT)显示来自 abort(3) (SIGABRT) 的运行时 ErrorAbort 信号
【发布时间】:2020-09-13 07:25:57
【问题描述】:

// Sum of Sub-Array

#include<iostream>
#include<vector>
using namespace std;

  
void firstSubArray(vector<int> arr, int size, int sum)
{
    int newSum = 0;
    int beginPos=0;
    for(int i = 0; i<size; i++)
    {
        newSum += arr.at(i);
        if(newSum > sum)
        {
            newSum = newSum - arr.front();
            arr.erase(arr.begin());
            beginPos++;
        }
        if(newSum == sum) {
            cout << beginPos + 1 << " " << i + 1;
            return;
        }
    }
    cout<<"-1";
}


int main()
{
    int testCases;
    cin>>testCases;
    int size, sum;
    int temp;

    for(int j = 0; j<testCases; j++) {
        cin>>size>>sum;
        vector<int>arr;
        for (int i = 0; i < size; i++) {
            cin >> temp;
            arr.push_back(temp);
        }
        firstSubArray(arr, size, sum);
        cout<<endl;
    }


    return 0;
}

问题:给定一个大小为 N 的非负整数的未排序数组 A,找到一个连续子数组,它添加到给定数字 S。我的代码为给定的测试用例提供了正确的答案但在提交时显示运行时错误。

错误: 运行时错误: 来自 abort(3) (SIGABRT) 的运行时 ErrorAbort 信号

链接: Question Link

【问题讨论】:

    标签: c++ arrays signals sigabrt abort


    【解决方案1】:

    您正在尝试访问向量中不存在的位置。服务器上的执行程序检测到这种情况并中止。第一步,将arr 更改为vector &lt; int &gt; const &amp;arr

    【讨论】:

    • 但我不想使数组/向量保持不变,因为我需要擦除程序中的前面元素。还请澄清它如何尝试访问超出范围的位置。
    • 手头的任务没有提到擦除前面的元素,我认为没有理由这样做。当您修改底层容器时,会使您可能拥有的任何索引无效。
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2017-02-13
    相关资源
    最近更新 更多