我对此代码有疑问:
1) Segmentation fault in cpp object.
相同的代码可用于
main
函数。// 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
类的Matrix
成员,而是在std::vector<std::vector<int>> vec
的构造函数中引入了本地Matrix
,该构造函数内部只有生命周期。
您应该使用传递的std::vector::resize
和vec
将m
成员化为 n
。
Matrix::Matrix(int m, int n)
{
this->m = m;
this->n = n;
vec.resize(m, std::vector<int>(n));
}
或使用constructor member initializer lists初始化
vec
。Matrix::Matrix(int m, int n)
: m{ m }
, n{ n }
, vec(m, std::vector<int>(n))
{}
附带说明:
using namespace std;
一起练习。 例如:
#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))
{}
};
关于c++ - 分段故障(核心已转储)-二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59521429/