我正在使用双指针,但是当我尝试删除它时,它会导致堆损坏:CRT检测到应用程序在堆结束后写入内存。据“崩溃”的对象的析构函数中:删除双指针导致堆损坏
Map::~Map()
{
for(int i = 0; i < mTilesLength; i++)
delete mTiles[i];
delete[] mTiles;
}
mTiles声明是这样的:
Tile **mTiles = NULL;
mTiles = new Tile *[mTilesLength];
for(int i = 0; i < mTilesLength; i++)
mTiles[i] = new Tile(...);
如果显着mTiles是“砖”的对象,从对象“雪碧”继承所有3个析构函数都被设置为虚拟(地图,磁贴,精灵),并不确定这是否有所作为,但似乎直到现在才起作用。
您的班级是否遵循三项规则? – chris
你能构建一个最小化的完整测试用例来证明这个问题吗?你发布的代码没有问题,所以问题在于别处。 – NPE
FWIW,您显示的语法是正确的。 –