首页 > 解决方案 > 在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 的值(如问题中所述)很大的测试用例。它给出了“分段故障”错误。有人可以解释为什么我会收到这个错误。

标签: c++variable-length-array

解决方案


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


推荐阅读