You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:48:00