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

嵌套for循环运行异常及sum函数无法累加数组值问题排查

问题分析与修复方案

核心问题拆解

  • 循环变量未初始化:所有for循环中的num1、num2都没设置初始值,C++局部变量默认是随机垃圾值,导致循环条件可能直接不成立(比如num1初始值≥3),外层循环自然只跑一次甚至完全不执行。
  • 数组越界访问:定义的array[2][3]只有2行(索引0-1)、3列(索引0-2),但循环条件写的是num1 < 3、num2 < 4,会访问超出数组范围的内存,触发未定义行为。
  • 累加变量未初始化:sum函数里的int sum;没初始化为0,累加时会从随机垃圾值开始计算,结果完全错误。
  • 函数返回值缺失:sum函数声明返回int,但代码里没有return语句,属于语法漏洞。
  • 函数参数误区:C++二维数组作为函数参数时,必须指定第二维大小,int a[][3]是正确写法,改成a[][]会编译报错,a[2][3]本质和前者等价,所以修改参数解决不了问题。

修复后的完整代码

#include<iostream>
using namespace std;

int sum(int a[][3], int rows); // 新增行数参数,提升灵活性

int main()
{
    int array[2][3];

    // 循环变量初始化,且匹配数组实际大小
    for (int num1 = 0; num1 < 2; num1 ++)
    {
        for (int num2 = 0; num2 < 3; num2 ++)
        {
            cout << "Enter a number to be stored in array[" << num1 << "][" << num2 << "]: ";
            cin >> array[num1][num2];
        }
    }

    sum(array, 2); // 传入数组行数

    return 0;
}

int sum(int a[][3], int rows)
{
    int sum = 0; // 初始化累加变量为0
    for (int num1 = 0; num1 < rows; num1 ++) // 用传入的行数控制循环
    {
        for (int num2 = 0; num2 < 3; num2 ++) // 匹配数组列数
            sum += a[num1][num2];
    }

    cout << "The sum is: " << sum << endl;
    return sum; // 补充函数返回值
}

额外优化说明

  • 给sum函数新增rows参数,不用硬编码行数,让函数适配不同行数的二维数组。
  • 循环变量严格匹配数组的索引范围,彻底避免越界问题。
  • 所有局部变量都显式初始化,杜绝随机值干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:28:21