c++ - 在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
一些元素。这是一个巨大的数字。如果我们认为 anint
是 32 位(或 4 个字节),那么您谈论的n * 4000000
字节值数据很可能在兆字节范围内,因此您的错误。这很容易被堆栈分配太多,而且效率很低。
考虑std::vector<>
改用。
推荐阅读
- python - Binary Search - Series 的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
- php - 将 Alpine JS 值传递给 Livewire 组件
- java - 从 Firebase 检索的自定义对象始终具有 Null 属性
- python - 如何在列表中查找所有字典索引?
- r - 我正在尝试创建一个模型,该模型生成一个包含四个字符 {a、b、c、d} 的 256 个唯一组合的列表
- powershell - 相当于 Cat ./* ../path2/* > file.sql 的 Powershell
- dart - Dart FFI 类型映射
- java - 如何在unirest中发送文件
- python - 获取当前事务被中止,在尝试将数据插入 postgres 表时忽略命令直到事务块错误结束
- android - Sunable 可以在 Playstore 上上传签名的 apk