矩阵乘法函数c ++的向量析构函数错误

时间:2021-07-20 09:06:28

标签: c++ vector destructor

我想定义一个矩阵乘法函数。执行操作并构建结果矩阵,但在主函数的末尾,我在 stl_vector.h 中出现错误。

第一次尝试:

#include <iostream>
#include <vector>
using namespace std;

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 ( 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].push_back( sum );
        }
    }
}
int main() {
    vector<vector<int>> aaa(4);
    for (int i = 0; i < aaa.size(); ++i) {
        aaa[i].assign ( aaa.size(), 1 );
    }

    vector<vector<int>> bbb(4);
    for (int i = 0; i < bbb.size(); ++i) {
        bbb[i].assign ( bbb.size(), 2 );
    }

    std::cout << bbb.size();

    matrix_multiplication(aaa,bbb,aaa.size());
}

第二次尝试:

#include <iostream>
#include <vector>
using namespace std;

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;
        }
    }
}

int main() {
    vector<vector<int>> aaa(4);
    for (int i = 0; i < aaa.size(); ++i) {
        aaa[i].assign ( aaa.size(), 1 );
    }

    vector<vector<int>> bbb(4);
    for (int i = 0; i < bbb.size(); ++i) {
        bbb[i].assign ( bbb.size(), 2 );
    }

    std::cout << bbb.size();

    matrix_multiplication(aaa,bbb,aaa.size());
}

当我运行此代码时:

Process finished with exit code -1073741819 (0xC0000005)

当我调试代码时,它卡在这一行(在 stl_vector.h 中)。

 ~vector() _GLIBCXX_NOEXCEPT
      { std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
              _M_get_Tp_allocator()); } (this line)

0 个答案:

没有答案
相关问题