解构数组数组

时间:2014-12-03 03:49:21

标签: c++ destructor access-violation

我有一个网格类,如下所示。在我的程序中使用它工作正常,直到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
    }
}

0 个答案:

没有答案