问题描述
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<>
。