在c++中初始化矩阵时出现分段错误(核心转储)

Segmentation fault (core dumped) when initializing a matrix in c++

本文关键字:错误 分段 核心 转储 c++ 初始化      更新时间:2023-10-16
执行实例化类Matrice的程序并在其构造函数中创建它时,我遇到了Segmentation fault (core dumped)错误。

这是我的简单代码:

#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
class Matrice{
public:
std::vector<std::vector<int> > mat;
Matrice(){
for(int i=0; i < 3; ++i) {
for(int j=0; j < 2; ++j) {
mat[i][j] = rand()%(10-0)+0;
}
}
}
};

int main(){
Matrice mat1;
return 0;
}

有人能启发我吗?

Matrice(){
for(int i=0; i < 3; ++i) {
mat.push_back(std::vector<int>());
for(int j=0; j < 2; ++j) {
mat[i].push_back(rand()%(10-0)+0);
}
}
}

编辑:

说明:矢量需要push_back函数调用在矢量的末尾添加一个元素,如果超出了最初为矢量分配的大小,则会自动为矢量重新分配空间。由于它是一个向量的向量,您首先需要推回一个任意向量,然后在mat[i]中存储的每个任意向量处,我们push_back所需的随机整数值。

在访问元素之前,您需要调整矩阵的大小:

mat.resize(3);
for( int i=0; i < 3; ++i)
{
mat[i].resize(2);
}

您使用std::vector不正确。请参阅https://en.cppreference.com/w/cpp/container/vector/operator_at

[]运算符返回对现有值的引用。与std::map不同,它不插入新值。使用std::vector::push_back()向矢量添加元素。