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

C++将array替换为std::vector后程序运行异常是什么原因?

问题原因

你的代码存在数组越界访问的未定义行为,之前使用原生动态数组时没有出现异常只是概率性巧合,替换为std::vector后内存布局变化触发异常是符合预期的,并不代表std::vector本身存在问题。

具体错误点定位

问题出在你写的外层for循环逻辑:

for (; i >= 0; A[i]++)

C++中for循环的执行顺序为:

  1. 判断循环条件i >= 0,成立则进入循环体
  2. 循环体执行完成后,无条件执行第三个循环表达式,再回到第一步判断条件

你在循环体内部的内层for循环,会把变量i递减到-1才退出循环体,此时会直接执行A[i]++也就是A[-1]++,非法访问了vector下标为-1的内存位置,属于典型的缓冲区越界错误,这就是程序偶现异常的根源。

修复方案

把A[i]++的操作挪到循环体内,且只在i为合法值的时候执行即可,参考修改后的代码:

#include <iostream>
#include <vector>

int main() {
    int n = 3;
    for (int k = 1; k <= 4; ++k) {
        std::vector<int> A(k, 0);
        int i = 0;
        // 调整循环逻辑,移除循环头的A[i]++
        for (; i >= 0; ) {
            for (int j = 0; j < k; ++j) {
                std::cout << A[j] << " ";
            }
            std::cout << "\n";
            for (i = k - 1; i >= 0 && A[i] == n - 1; i--)
                A[i] = 0;
            // 仅i合法时执行自增
            if (i >= 0) {
                A[i]++;
            }
        }
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:15:02