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

C++程序退出主for循环后崩溃,疑与二维vector释放有关

二维vector退出循环时崩溃的原因与修复

我的代码在主for循环内部运行正常,但退出该循环时立即崩溃。经过调试,我认为这与二维vector「m」的内存释放有关。我从未遇到过此类问题,且自认为已正确初始化「m」。

问题代码

#include <iostream>
#include <vector>

int main() {
    std::ios::sync_with_stdio(false);
    int t;
    std::cin >> t;
    std::vector<int> answers(t);
    for (int i = 0, n, a; i < t; ++i) {
        int net = 0, sum = 0;
        std::cin >> n;
        std::vector<int> input(n);
        std::vector<std::vector<int>> m(n, std::vector<int>(n, 0));
        for (int j = 0; j < n; ++j) {
            std::cin >> a;
            input[j] = a;
        }
        for (int j = 0; j < n; j += 2)
            sum += input[j];
        for (int j = 0; j < n - 1; ++j) {
            m[j][j + 1] = input[j] - input[j + 1];
            if (j % 2 == 0)
                m[j][j + 1] *= -1;
            if (m[j][j + 1] > net)
                net = m[j][j + 1];
        }
        for (int j = 3; j < n; j += 2)
            for (int k = 0; k <= n - j; ++k) {
                m[k][j + k] = m[k][k + 1] + m[k + 2][j + k];
                if (m[k][j + k] > net)
                    net = m[k][j + k];
            }
        answers[i] = sum + net;
    }
    for (auto i : answers) {
        std::cout << i << '\n';
    }
    return 0;
}

测试输入

1
10
7 8 4 5 7 6 8 9 7 3

问题分析

崩溃的根本原因不是vector内存释放异常,而是数组越界访问导致的内存损坏。

看这段内层循环代码:

for (int j = 3; j < n; j += 2)
    for (int k = 0; k <= n - j; ++k) {
        m[k][j + k] = m[k][k + 1] + m[k + 2][j + k];
        // ...
    }

当n=10、j=3时,k的取值上限是n-j=7,此时j+k=3+7=10,但m是n×n的二维vector,索引范围为0~9,访问m[k][10]属于越界操作。这种未定义行为会破坏vector的内部数据结构或其他内存区域,导致后续循环退出、vector销毁时触发崩溃。

修复方案

将内层循环的条件从k <= n - j修改为k < n - j,确保j+k < n,彻底避免越界:

for (int j = 3; j < n; j += 2)
    for (int k = 0; k < n - j; ++k) {
        m[k][j + k] = m[k][k + 1] + m[k + 2][j + k];
        if (m[k][j + k] > net)
            net = m[k][j + k];
    }

修改后运行测试输入,代码可正常执行输出结果,退出循环时无崩溃现象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:07:46