在hackerrank问题中获取分段错误错误 - 可变长度数组

问题描述

https://www.hackerrank.com/challenges/variable-sized-arrays/problem

这是问题陈述。 我尝试了以下代码

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int n,q;
    cin>>n>>q;
    int n1;
    int A[n][1000000];
   
for(int i =0; i<n; i++)   
{ cin>>n1;
     
    for(int j=0; j<n1; j++){
        int c;
        cin>>c;
        A[i][j] = c;
    }
}

int a,b;
for(int i=0;i<q; i++){
cin>>a>>b;
    
    cout<<A[a][b]<<"\n";
}
    return 0;
}

代码通过了示例测试用例和其他自定义输入(我尝试了少量输入值)。但它不适用于 n 和 q 的值(如问题中所述)很大的测试用例。它给出了“分段错误错误。有人可以解释为什么我会收到这个错误

解决方法

在这里 int A[n][1000000]; 您分配了 n * 1000000 个元素。这是一个巨大的数字。如果我们认为 int 为 32 位(或 4 个字节),那么您谈论的是 n * 4000000 字节的数据,这很可能在兆字节的范围内,因此您的错误。这很容易被堆栈分配太多,而且效率很低。
考虑改用 std::vector<>