C++ 分段故障(堆芯转储)-二维阵列
我对此代码有问题: 在主函数上使用相同的代码C++ 分段故障(堆芯转储)-二维阵列,c++,arrays,class,constructor,stdvector,C++,Arrays,Class,Constructor,Stdvector,我对此代码有问题: 在主函数上使用相同的代码 // Create vector< vector<int> > vec(4, vector<int>(4)); // Write vec[2][3] = 10; // Read int a = vec[2][3]; 我创建了一个二维数组元素。内存分配有问题。我不知道怎么处理 #include <iostream> #include <vector> using namespace
// Create
vector< vector<int> > vec(4, vector<int>(4));
// Write
vec[2][3] = 10;
// Read
int a = vec[2][3];
我创建了一个二维数组元素。内存分配有问题。我不知道怎么处理
#include <iostream>
#include <vector>
using namespace std;
class Matrix
{
public:
int m, n;
Matrix();
Matrix(int, int);
vector<vector<int> > vec;
};
int main()
{
Matrix obj(3, 4);
obj.vec[1][2] = 33;
return 0;
}
Matrix::Matrix()
{
n = 0;
m = 0;
vector< vector<int> > vec(m, vector<int>(n));
}
Matrix::Matrix(int m, int n)
{
this->m = m;
this->n = n;
vector< vector<int> > vec(m, vector<int>(n));
}
您没有分配矩阵类的vec成员,而是在矩阵的构造函数中引入了一个本地std::vector vec,它在构造函数中只有生存期 您应该使用传递的m和n对成员vec进行初始化 作为旁注: 为成员和构造函数参数使用不同的名称,以避免混淆 不要和我一起练习 例如:
#include <vector>
class Matrix /* final */
{
int mRow, mCol;
std::vector<std::vector<int>> mStorage;
public:
Matrix(int m, int n) // different name as the members
: mRow{ m }
, mCol{ n }
, mStorage(mRow, std::vector<int>(mCol))
{}
};
您没有分配矩阵类的vec成员,而是在矩阵的构造函数中引入了一个本地std::vector vec,它在构造函数中只有生存期 您应该使用传递的m和n对成员vec进行初始化 作为旁注: 为成员和构造函数参数使用不同的名称,以避免混淆 不要和我一起练习 例如:
#include <vector>
class Matrix /* final */
{
int mRow, mCol;
std::vector<std::vector<int>> mStorage;
public:
Matrix(int m, int n) // different name as the members
: mRow{ m }
, mCol{ n }
, mStorage(mRow, std::vector<int>(mCol))
{}
};
我对没有参数的构造函数有问题。分段错误@JeJo'Matrix::Matrix{n=0;m=0;vec.resizem,vectrain;}'@Mouse在那里您也有与其他构造函数相同的问题,但这不会影响程序。由于m和n为0,所以vec的大小也将为0,因此通过std::vector::operator[]访问元素是不受限制的,因此,您不应该这样做!我对没有参数的构造函数有问题。分段错误@JeJo'Matrix::Matrix{n=0;m=0;vec.resizem,vectrain;}'@Mouse在那里您也有与其他构造函数相同的问题,但这不会影响程序。由于m和n为0,所以vec的大小也将为0,因此通过std::vector::operator[]访问元素是不受限制的,因此,您不应该这样做!
Matrix::Matrix(int m, int n)
: m{ m }
, n{ n }
, vec(m, std::vector<int>(n))
{}
#include <vector>
class Matrix /* final */
{
int mRow, mCol;
std::vector<std::vector<int>> mStorage;
public:
Matrix(int m, int n) // different name as the members
: mRow{ m }
, mCol{ n }
, mStorage(mRow, std::vector<int>(mCol))
{}
};