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

为什么C++代码添加无逻辑作用的自增整数后运行输出结果异常

问题根因

你的代码本身存在未定义行为(UB),添加变量后运行结果变化是未定义行为的典型表现,核心问题出在全局数组nums的定义上:

  • 你定义了int nums[] = {};,这是C++标准不支持的零长度数组(属于部分编译器的扩展语法),数组实际可用空间为0。
  • 在rq2函数中你向nums[n2]写入用户输入的4个值,属于严重的数组越界访问,写入的内容会直接覆盖数组后方内存区域存储的其他数据。

全局变量存储在静态存储区,按照你声明的顺序排布:i → j → nums(零长度,无实际占用空间) → co。你向nums写入的元素会直接覆盖co、甚至更后方内存的值:

  • 原代码中co没有被任何逻辑读取,就算被越界写入覆盖了值,也不会影响运行结果,所以看起来符合预期。
  • 你添加co++操作后,co的值会参与运算,此时co的内存已经被nums的越界写入篡改,会触发后续逻辑的异常:你代码的sort函数中存在return分支,被篡改的co或其他被越界覆盖的变量值会导致逻辑提前触发return,只输出一行结果就退出。

修复方案

不要使用零长度数组,改为动态分配数组空间:

  1. 删掉全局的int nums[] = {};定义
  2. 在rq1获取到输入的i之后,再创建对应长度的数组,推荐使用标准容器std::vector:
#include <vector>
std::vector<int> nums;

void rq1()
{
    std::cout << "How many numbers?";
    std::cin >> i;
    nums.resize(i); // 调整vector长度为输入的i
}

修改后数组不会再越界,添加co++也不会影响运行逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:54:03