我有一个网格类,如下所示。在我的程序中使用它工作正常,直到main()函数返回,然后有一个错误消息,程序由于未捕获的异常而崩溃。如果我注释掉析构函数,那么该类的工作正常。实现这个析构函数的正确方法是什么?
如果我只是delete[] grid
我认为其中的数组没有被释放。
确切错误:Battleship.exe中0x000869F5处的未处理异常:0xC0000005:访问冲突写入位置0xDDDDDDD。
class Grid
{
private:
int numRows;
int numCols;
char** grid; // array of arrays / pointer to pointer to char
public:
/*****************************************************************
Constructor()
*****************************************************************/
Grid() : numRows(0), numCols(0)
{
}
/*****************************************************************
Constructor(int, int)
*****************************************************************/
Grid(int numRows, int numCols) : numRows(numRows), numCols(numCols)
{
grid = new char*[numRows];
for (int arr = 0; arr < numRows; ++arr) {
grid[arr] = new char[numCols];
}
}
/*****************************************************************
Destructor NEEDS MAJOR EDIT AS IT IS CAUSING THE PROGRAM TO CRASH
*****************************************************************/
~Grid()
{
for (int i = 0; i < numRows; ++i)
{
delete[] grid[i]; //delete all subarrays of grid
}
delete[] grid; //delete grid
}
}