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

C++中打印数组后输出换行符出现非预期结果是什么原因?

问题根因

你的代码触发了C++的未定义行为,核心错误出在sum函数的循环变量定义逻辑上:

for (int i; i < n; i++) {

这里你声明了局部变量i但没有显式赋初始值。C++中栈上分配的局部非静态变量不会被自动初始化,它的初始值完全取决于当前栈内存区域之前遗留的随机数据。

你观察到的“加换行打印就出错、删了就正常”只是巧合:

  • 保留换行打印语句时,IO操作、函数调用过程会修改栈内存的遗留数据,刚好让i的初始值不为0,循环从随机偏移量开始执行,自然得到错误的求和结果,严重时还可能触发数组越界访问崩溃。
  • 删除换行打印语句时,栈内存的遗留值刚好让i的初始值为0,循环能正常遍历完整的5个数组元素,因此得到正确结果,但这种稳定是暂时的,只要运行环境、编译参数稍有变化就会再次出错。

修复方案

给sum函数的循环变量i显式添加初始值0即可:

int sum(int arr[], int n)
{
    cout << arr << "\n";
    int total = 0;
    for (int i = 0; i < n; i++) {
        total += arr[i];
    }
    return total;
}

修复后无论是否保留那行换行打印语句,程序都会稳定输出正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:45:07