gpt4 book ai didi

c++ - 分段故障(核心已转储)-二维数组

转载 作者:行者123 更新时间:2023-12-02 09:56:41 29 4
gpt4 key购买 nike

我对此代码有疑问:

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::resizevecm成员化为 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/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com