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

锯齿数组出现垃圾值问题求助:基于含-111的数组确定维度

锯齿数组出现垃圾值的原因及修复方案

核心问题分析

  • 未复制原数组数据:你只给jagArr分配了内存,但完全没有把原数组arr2的元素复制进去。C++中new分配的内存是未初始化的,里面全是随机垃圾值,直接输出自然会显示乱码。
  • 重复分配内存导致泄漏:代码里两次给jagArr[i]分配内存,第二次循环还重复10次,之前分配的内存地址被覆盖,直接造成内存泄漏,完全没必要。
  • 列数计算逻辑错误:原代码遍历每行所有列时,每次循环都会更新numbers[i],最后numbers[i]只会保留最后一列的计算结果,根本没法正确识别行中是否存在-111。比如某行前几列有-111,但后面列没有,最后numbers[i]会被覆盖成c,不符合你“遇到-111就用该位置作为列数,没遇到就新增-111”的需求。

修复后的代码

int jaggedArr(int** arr2, int r, int c)
{
    int* numbers = new int[r]; /// 存储每行的列数
    int** jagArr = new int*[r];   /// 锯齿数组

    for (int i = 0; i < r; i++)
    {
        int hasMarker = 0;
        // 先遍历当前行,查找是否存在-111
        for (int j = 0; j < c; j++)
        {
            if (arr2[i][j] == -111)
            {
                numbers[i] = j + 1; // 包含-111本身,列数为j+1
                hasMarker = 1;
                break; // 找到标记就停止遍历
            }
        }
        // 若未找到-111,列数设为c+1(要新增一个位置存-111)
        if (!hasMarker)
        {
            numbers[i] = c + 1;
        }
    }

    // 为锯齿数组的每行分配对应大小的内存
    for (int i = 0; i < r; i++)
    {
        jagArr[i] = new int[numbers[i]];
    }

    // 将原数组数据复制到锯齿数组,必要时添加-111
    for (int i = 0; i < r; i++)
    {
        int j;
        // 复制原数组内容,遇到-111就停止
        for (j = 0; j < c; j++)
        {
            jagArr[i][j] = arr2[i][j];
            if (arr2[i][j] == -111)
            {
                break;
            }
        }
        // 如果原行遍历完都没找到-111,在末尾添加
        if (j == c)
        {
            jagArr[i][c] = -111;
        }
    }

    cout << "Showing all the Inputed data in a matrix form" << endl;
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < numbers[i]; j++) 
        {
            // 可根据需要恢复格式化输出逻辑
            cout << jagArr[i][j];
            if (j != numbers[i]-1) cout << "   |";
        }
        cout << "\n";
    }

    // 释放动态分配的内存,避免内存泄漏
    for (int i = 0; i < r; i++)
    {
        delete[] jagArr[i];
    }
    delete[] jagArr;
    delete[] numbers;

    return **arr2;
}

内容的提问来源于stack exchange,提问作者Ahmad Bilal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:27:34