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

C++矩阵乘法函数触发vector析构错误退出码0xC0000005

错误原因
  • 核心问题为非void函数未返回有效值触发的未定义行为:你的matrix_multiplication函数声明返回类型为std::vector<std::vector<int>>,但两个版本的实现均未添加return res;语句。C++标准明确规定,非void函数执行结束未返回有效值属于未定义行为,在你的运行环境中表现为返回值对应的vector对象内存布局被破坏,程序退出析构该非法对象时触发内存访问错误(退出码0xC0000005是Windows平台标准的内存访问违规错误码)。
  • 崩溃点落在vector析构函数的原因:函数调用约定下,编译器会在调用方(main函数)负责析构matrix_multiplication的返回值对象,但由于你没有正确返回构造完成的res对象,返回值对象的内部成员指针是非法值,析构时访问非法内存就会触发崩溃。
修复方案

有两种可选修复方式:

  1. 保留返回值设计:在matrix_multiplication函数的最后一行添加return res;语句即可,修改后的函数示例:
std::vector<std::vector<int>> matrix_multiplication(std::vector<std::vector<int>> &a, std::vector<std::vector<int>> &b, size_t n){
    std::vector<std::vector<int>> res ( n );
    for (int i = 0; i < n; ++i) {
        res[i].assign ( n, 0 );
    }
    for ( size_t i = 0; i < n; i++ ) {
        for ( size_t j = 0; j < n; j++ ) {
            int sum = 0;
            for ( size_t k = 0; k < n; k++ ) {
                sum += a[i][k] * b[k][j];
            }
            res[i][j] = sum;
        }
    }
    return res; // 新增此行
}
  1. 不需要返回结果的场景:直接将函数返回值类型修改为void,不需要改动其他逻辑即可解决崩溃问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 22:06:02