使用int**实现可变多维数组时出现段错误该如何解决?
问题根本原因
- 第一个核心错误:
variablesizedarr函数中读取数组元素的循环起始索引错误
你定义的数组长度为size,该题的输入格式为每个数组行是[数组长度k] + [k个元素],你在main函数中已经提前读取了长度size,接下来需要读取size个元素存入数组,但你的循环写的是for(int i=1;i<size;i++),会导致两个问题:- 数组第一个位置
arr[0]没有被赋值,是未初始化的垃圾值 - 只读取了
size-1个元素,少读1个元素,直接导致后续所有输入流的内容错位,后面读取的查询索引i、j实际上是前面数组没读完的元素值,大概率远大于数组合法下标范围,触发越界访问导致段错误
- 数组第一个位置
- 第二个潜在问题:如果题目给出的查询索引是1-based(从1开始计数),你直接用
vararr[i][j]访问也会越界,需要转换为0-based的下标。
修复方案
首先把variablesizedarr函数里的循环起始值改成0:
int* variablesizedarr(int size){ int* arr= new int [size]; for(int i=0;i<size;i++){ // 原代码i=1改为i=0 cin >>arr[i]; } return arr; }
如果测试用例的查询是1-based的,再调整输出行的索引:
cin >>i>>j; cout << vararr[i-1][j-1] << endl;
内容的提问来源于stack exchange,提问作者Shivam Siuu
相关产品推荐
相关产品推荐

