我需要帮助。现在,我试图制作一个Matrix类,但是每次在Visual Studio 2013中运行它时,程序都会冻结。我认为复制构造函数存在一些麻烦。这是完整的代码。 `
class Matrix
{
private:
int** matrix;
int X; // Matrix rows
int Y; // Matrix columns
public:
// Default Constructor
Matrix()
{
X = 0;
Y = 0;
matrix = NULL;
}
// Constructor with parameters
Matrix(int _X, int _Y)
{
srand(time(NULL));
X = _X;
Y = _Y;
matrix = new int*[X];
for (int i = 0; i < X; i++)
matrix[i] = new int[Y];
for (int i = 0; i < X; i++)
{
for (int j = 0; j < Y; j++)
{
matrix[i][j] = rand() % 100;
}
}
}
// Copy constructor
Matrix(const Matrix& N)
{
X = N.X;
Y = N.Y;
matrix = new int*[X];
for (int i = 0; i < X; i++)
matrix[i] = new int[Y];
for (int i = 0; i < X; i++)
{
for (int j = 0; j < Y; j++)
{
matrix[i][j] = N.matrix[i][j];
}
}
}
// Destructor
~Matrix()
{
for (int i = 0; i < X; i++)
delete[] matrix[X];
}
//--------------------------------------
void ShowMatrixOnScreen()
{
for (int i = 0; i < X; i++)
{
for (int j = 0; j < Y; j++)
cout << matrix[i][j] << " ";
cout << endl << endl;
}
}
};
void main()
{
Matrix x(4, 2);
x.ShowMatrixOnScreen();
}
`
函数“ShowMatrixOnScreen”在屏幕上打印矩阵“x”,但控制台冻结。
最佳答案
您的析构函数有以下声明delete[] matrix[X];
matrix[X]
不存在,因此您正在释放未分配给您的内存,这是未定义的行为。应该改为delete [] matrix[i]
!
此外,正如来自莫斯科的Vlad所指出的,建议对所有内存进行delete
,因此您还应考虑添加delete [] matrix
,以删除使用matrix = new int*[X];
分配的一维指针数组
关于c++ - 动态二维数组的复制构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33393435/