在类方法中分配二维数组

时间:2018-04-15 01:09:10

标签: c++ class

我似乎无法找到将int值分配给类方法中的二维数组的解决方案。点和尺寸通过其他功能设置。我可以并且可能应该在这里使用矢量,但我想知道如何以愚蠢的方式做到这一点?同样为了将来的参考我搜索了“C ++ 2-d数组里面的类赋值变量”但是我没有得到这个答案的答案,我错过了哪些术语?

class MatrixGraph
{
public:
    void askPoints();
    void labelPoints();
    void createMatrix();
    void defineEdges();
    void listEdges();

private:
    void findDimension();
    int points;
    string* labelArr;
    int dimension;
    int** matrix;
};
void MatrixGraph::createMatrix()
{
    findDimension();
    int** matrix = new int*[dimension];
    for (int i = 0; i < dimension; i++)
    {
        matrix[i] = new int[dimension];
    }
}
void MatrixGraph::defineEdges()
{
    int flag;
    for (int i = 0; i < dimension; i++)
    {
        for (int j = 0; i < dimension; j++)
        {
            if (i != j)
            {
                cout << "Does " << i << " and " << j << " have an edge? Type 1 if it has one, 0 if not: ";
                cin >> flag;
                this->matrix[i][j] = flag;
            }
            else
            {
                this->matrix[i][j] = 0;
            }
        }
    }
    cout << endl;
}

1 个答案:

答案 0 :(得分:0)

此处的问题是您使用matrix分配的new不是您在班级中声明的那个。

这里:

private:
    int** matrix;

matrix是您的类成员变量,但在您的createMatrix函数中,您正在执行此操作:

int** matrix = new int*[dimension];
for(int i = 0; i < dimension; i++)
{
    matrix[i] = new int[dimension];
}

matrix是一个局部变量,与类声明(类成员)中声明的matrix无关。因此,当您尝试在使用defineEdges的{​​{1}}函数中使用它时,它未被分配。

所以你需要改变你的this

createMatrix

请记住总是删除类析构函数中的已分配指针以避免内存泄漏。在你的情况下,像这样:

void MatrixGraph::createMatrix()
{
    findDimension();
    matrix = new int*[dimension];
    for (int i = 0; i < dimension; i++)
    {
        matrix[i] = new int[dimension];
    }
}