J_X_W_Q 2024-07-09 23:57 采纳率: 64.3%
浏览 4

C++,无法正常访问,读取无效数据

数组读取无效

tempP[r] = new OriData[s[r] + 1 + sum2 - sum1];
int N = 1;
for (int n = 0; n < s[r] + 1 + sum2 - sum1; n++)
{
                if (n < s[r] + 1)
                {
                    tempP[r][n] = p[r][n];
                }
                else if (n < s[r] + 1 + sum2 - sum1)
                {
                    tempP[r][n] = p[r][s[r]];
                    N++;
                }
}

其中的s[r]是p指二维数组中第r行的列数,sum2-sum1是大于0的需要增加的长度

img

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-07-09 23:57
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您好!看起来您遇到了一个 C++ 中数组访问越界的问题。根据您提供的代码片段和错误信息,我会尝试帮助您分析并解决这个问题。

    首先,错误提示“从 'tempP[r][1]' 中读取无效(可读范围是 0 到 /0]”表明在访问 tempP[r][1] 时,索引可能超出了数组的实际大小。但是,这里的“/0”很可能是一个错误,应该是某个数字,比如 0 或者数组的大小。

    在您的代码中,tempP[r] 是一个指针数组,每个元素指向一个 OriData 类型的数组。您使用 new 动态分配了内存,分配的大小是 s[r] + 1 + sum2 - sum1。这里有几个潜在的问题点:

    1. 数组分配大小:确保 s[r], sum1, 和 sum2 的值是正确的,并且 s[r] + 1 + sum2 - sum1 的结果不会超过 OriData 类型数组的最大大小限制。

    2. 循环条件:在您的循环中,您首先检查 n < s[r] + 1,然后是 n < s[r] + 1 + sum2 - sum1。这里需要确保 sum2 - sum1 的结果是正数,并且 s[r] + 1 + sum2 - sum1 不会超出数组的实际分配大小。

    3. 数组初始化:在第二个 else if 块中,您将 p[r][s[r]] 的值赋给 tempP[r][n],但是 N++ 似乎没有用在循环中,这可能是一个逻辑错误。

    4. 数组访问:确保在访问 tempP[r] 时,r 的值在有效的索引范围内。

    为了解决这个问题,您可以采取以下步骤:

    • 验证 s[r], sum1, 和 sum2 的值,确保它们是合理的。
    • 检查 s[r] + 1 + sum2 - sum1 的结果是否超出了 OriData 类型数组的最大大小。
    • 在访问 tempP[r] 之前,确保 r 在有效的索引范围内。
    • 如果可能的话,添加一些调试语句来打印出 s[r], sum1, sum2, 和 n 的值,以帮助确定问题发生的具体位置。

    如果您需要进一步的帮助,或者想要我帮助您检查代码逻辑,请随时告诉我。我会尽力提供更多的帮助。

    至于参考链接,由于您的问题比较具体,可能没有直接的链接可以提供,但是您可以查阅 C++ 的数组和内存管理相关的文档,例如:

    希望这些信息对您有所帮助!如果您有其他问题或需要进一步的指导,请随时联系我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月9日

悬赏问题

  • ¥15 esp32cam串口图传
  • ¥15 C# 用partial定义部分类无法快速预览代码
  • ¥15 fastreport 代码无法设置最后一页横线不显示
  • ¥15 stm32u535芯片usb hid custom类接收数据有问题
  • ¥15 传染病最优控制问题,控制为什么没起作用
  • ¥15 ue5.3 pico打包失败 求帮助
  • ¥15 请教,这是用chatgpt写的CAD LISPD脚本,需求是画一个由双直线组成的矩形
  • ¥50 微信小程序 成功包奶茶啊
  • ¥15 计算机博弈的六子棋代码
  • ¥15 在Fetch API中传送的参数为何不起作用?