0

我不明白为什么我的成员函数 ij 无法访问在我的构造函数中使用的 2D 指针数组 rp 中创建的内存位置。任何帮助是极大的赞赏。谢谢。

这是我的代码及其输出:


using namespace std;
#include <iostream>
class Mymatrix
{
    int numRows, numCols;
    int **rp;
public:
    Mymatrix(int r, int c)
    {
        numRows = r;
        numCols = c;
        int *rp[numRows];
        int i, j;
        for (i = 0; i < numRows; i++)
            rp[i] = new int[numCols];
        for (i = 0; i < numRows; i++)
        {
            cout << endl;
            for (j = 0; j < numCols; j++)
            {
                *(rp[i] + j) = i + j + 2;
                cout << rp[i] + j << "\t";
                std::cout << *(rp[i] + j) << "\n";
            }
        }
        std::cout << std::endl;
    }
    //Now, define member function to access the element in row-i, column-j.
    int ij(int i, int j)
    {
        cout << *(rp[i] + j) << endl;
        return *(rp[i] + j);
    }
};
///////////////

int main()
{
    Mymatrix M1(5, 7);
    M1.ij(2, 3);
    return 0;
}

////////////////////////////////////////////////////////////////////////////////////

0x2010c20 2
0x2010c24 3
0x2010c28 4
0x2010c2c 5
0x2010c30 6
0x2010c34 7
0x2010c38 8

0x2010c50 3 0x2010c54 4 0x2010c58 5 0x2010c5c 6 0x2010c60 7 0x2010c64 8 0x2010c68 9

0x2010c80 4 0x2010c84 5 0x2010c88 6 0x2010c8c 7 0x2010c90 8 0x2010c94 9 0x2010c98 10

0x2010cb0 5 0x2010cb4 6 0x2010cb8 7 0x2010CBC 8 0x2010cc0 9 0x2010cc4 10 0x2010cc8 11

0x2010ce0 6 0x2010ce4 7 0x2010ce8 8 0x2010cec 9 0x2010cf0 10 0x2010cf4 11 0x2010cf8 12

分段故障

4

1 回答 1

1

您从未在代码中初始化类成员int **rp

int *rp[numRows];这不是有效的 C++ 语法。幸运的是,编译器将创建一个自动对象,当构造函数执行完成时该对象将不可用。

rp = new int*[numRows];相反,它会为类成员分配存储空间,而不是创建构造函数本地的对象。

于 2020-03-28T05:37:54.047 回答