我想定义一个矩阵乘法函数。执行操作并构建结果矩阵,但在主函数的末尾,我在 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)