在具有大量输入的 C++ 中使用向量时出现运行时错误

问题描述

我试图解决黑客地球问题以更好地理解 C++。 任务如下:
第一行由一个整数 T 组成,表示测试用例的数量。 对于每个测试用例:

  1. 第一行由两个整数 N 和 K 组成,N 是数组中元素的数量,K 表示旋转的步数。
  2. 下一行由 N 个空格分隔的整数组成,表示数组 A 的元素。

所以,如果输入是这样的

1
5 2
1 2 3 4 5

输出应该是

4 5 1 2 3

我写的代码如下:


#include <iostream>
#include<bits/stdc++.h>

using namespace std;


void ans(int r,vector<int> &a)
{
    reverse(a.begin(),a.end());
    reverse(a.begin(),a.begin()+r);
    reverse(a.begin()+r,a.end());
}


int main() {
    int testno;
    cin>>testno;
    int size,rotation,temp;
    vector<vector<int>> arr(testno);
    for(int i=0;i<testno;i++)
    {
        cin>>size;
        cin>>rotation;
        for(int j=0;j<size;j++)
        {
            cin>>temp;
            arr[i].push_back(temp);
        };
        ans(rotation,arr[i]);
    };
    for(int i=0;i<arr.size();i++)
    {
        for(int j=0;j<arr[i].size();j++)
            cout<<arr[i][j]<<" ";
        cout<<"\n";
    };
}

此代码适用于小型测试用例或数字。
但是当输入很大时,我收到以下错误:

Execution failed.

Stack Trace:
*** Error in `/hackerearth/CPP17_a870_37de_35ba_2748/s_3a8f_d922_ff44_e648.cpp.out': malloc(): memory corruption (fast): 0x0000000001b0ad50 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777f5)[0x7f10c1df57f5]
/lib/x86_64-linux-gnu/libc.so.6(+0x82679)[0x7f10c1e00679]
/lib/x86_64-linux-gnu/libc.so.6(__libc_malloc+0x54)[0x7f10c1e021d4]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(_Znwm+0x15)[0x7f10c2405c75]
/hackerearth/CPP17_a870_37de_35ba_2748/s_3a8f_d922_ff44_e648.cpp.out[0x400f62]
/hackerearth/CPP17_a870_37de_35ba_2748/s_3a8f_d922_ff44_e648.cpp.out[0x400bbb]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f10c1d9e840]
/hackerearth/CPP17_a870_37de_35ba_2748/s_3a8f_d922_ff44_e648.cpp.out[0x400d49]
======= Memory map: ========
00400000-00402000 r-xp 00000000 07:00 28 /hackerearth/CPP17_a870_37de_35ba_2748/s_3a8f_d922_ff44_e648.cpp.out
00601000-00602000 r--p 00001000 07:00 28 /hackerearth/CPP17_a870_37de_35ba_2748/s_3a8f_d922_ff44_e648.cpp.out
00602000-00603000 rw-p 00002000 07:00 28 /hackerearth/CPP17_a870_37de_35ba_2748/s_3a8f_d922_ff44_e648.cpp.out
01af8000-01b2a000 rw-p 00000000 00:00 0 [heap]
7f10bc000000-7f10bc021000 rw-p 00000000 00:00 0
7f10bc021000-7f10c0000000 ---p 00000000 00:00 0
7f10c1a75000-7f10c1b7d000 r-xp 00000000 ca:01 48154 /lib/x86_64-linux-gnu/libm-2.23.so
7f10c1b7d000-7f10c1d7c000 ---p 00108000 ca:01 48154 /lib/x86_64-linux-gnu/libm-2.23.so
7f10c1d7c000-7f10c1d7d000 r--p 00107000 ca:01 48154 /lib/x86_64-linux-gnu/libm-2.23.so
7f10c1d7d000-7f10c1d7e000 rw-p 00108000 ca:01 48154 /lib/x86_64-linux-gnu/libm-2.23.so
7f10c1d7e000-7f10c1f3e000 r-xp 00000000 ca:01 48130 /lib/x86_64-linux-gnu/libc-2.23.so
7f10c1f3e000-7f10c213e000 ---p 001c0000 ca:01 48130 /lib/x86_64-linux-gnu/libc-2.23.so
7f10c213e000-7f10c2142000 r--p 001c0000 ca:01 48130 /lib/x86_64-linux-gnu/libc-2.23.so
7f10c2142000-7f10c2144000 rw-p 001c4000 ca:01 48130 /lib/x86_64-linux-gnu/libc-2.23.so
7f10c2144000-7f10c2148000 rw-p 00000000 00:00 0
7f10c2148000-7f10c215f000 r-xp 00000000 ca:01 18214 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f10c215f000-7f10c235e000 ---p 00017000 ca:01 18214 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f10c235e000-7f10c235f000 r--p 00016000 ca:01 18214 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f10c235f000-7f10c2360000 rw-p 00017000 ca:01 18214 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f10c2360000-7f10c2533000 r-xp 00000000 ca:01 16581 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7f10c2533000-7f10c2732000 ---p 001d3000 ca:01 16581 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7f10c2732000-7f10c273d000 r--p 001d2000 ca:01 16581 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7f10c273d000-7f10c2740000 rw-p 001dd000 ca:01 16581 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7f10c2740000-7f10c2743000 rw-p 00000000 00:00 0
7f10c2743000-7f10c2769000 r-xp 00000000 ca:01 48198 /lib/x86_64-linux-gnu/ld-2.23.so
7f10c2948000-7f10c294e000 rw-p 00000000 00:00 0
7f10c2967000-7f10c2968000 rw-p 00000000 00:00 0
7f10c2968000-7f10c2969000 r--p 00025000 ca:01 48198 /lib/x86_64-linux-gnu/ld-2.23.so
7f10c2969000-7f10c296a000 rw-p 00026000 ca:01 48198 /lib/x86_64-linux-gnu/ld-2.23.so
7f10c296a000-7f10c296b000 rw-p 00000000 00:00 0
7fff76e54000-7fff76e75000 rw-p 00000000 00:00 0 [stack]
7fff76f09000-7fff76f0b000 r--p 00000000 00:00 0 [vvar]
7fff76f0b000-7fff76f0d000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]

我不明白为什么会出现运行时 malloc 错误?究竟发生了什么导致大输入错误?为什么会出现内存损坏?我是否试图访问运行时未分配给我的内存?如果是这样,在哪里?
如果需要,问题的链接是:https://www.hackerearth.com/practice/codemonk/

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)