在类方法中分配给二维数组

迈克尔16574

我似乎找不到找到将int值分配给类方法内的2-d数组的解决方案。点和尺寸是通过其他功能设置的。我可以并且可能应该在这里使用vector,但是我想知道我会怎么做呢?另外,为了将来参考,我搜索了“类赋值变量内部的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;
}
头盔显示器

这里的问题是matrixnew用来分配它的不是您在类中声明的那个。

这里 :

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函数using中使用它时this,不会分配它。

因此,您需要createMatrix像这样更改您的内容

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

请记住,始终删除类析构函数中分配的指针,以避免内存泄漏。您的情况是这样的:

~MatrixGraph()
{
    for(int i = 0; i < dimension; ++i)
    {
        delete[] matrix[i];
    }
    delete[] matrix;
    //and maybe : delete labelArr;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章