首页 > 解决方案 > vector destructor error for matrix multiplication function c++

问题描述

I wanted to define a function for matrix multiplication. The operation is performed and result matrix is built but in the end of main function I have an error in stl_vector.h.

first try:

#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());
}

second try:

#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());
}

when I run this code:

Process finished with exit code -1073741819 (0xC0000005)

and when I debug code, it stucks in this line (in stl_vector.h).

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

标签: c++vectordestructor

解决方案


推荐阅读