|
|
delete怎么这么容易出错,困惑啊!!!
void CTerrainTile::CreateTerrainTile(IDirect3DDevice9* pDevice, CTerrainCamera* pCamera, WORD Size, WORD MinEdge, D3DXVECTOR2 Offset, WORD TexSize, D3DXVECTOR2 Scale, float LightDirX, float LightDirZ, float Softness, char* HeightMapFile, LPCTSTR BlendMapFile)
{
m_Scale = Scale;
m_Offset = Offset;
m_Size = Size;
m_TexSize = TexSize;
m_MinEdge = MinEdge;
m_LightDirX = LightDirX;
m_LightDirZ = LightDirZ;
m_Softness = Softness;
m_HeightMapFile = HeightMapFile;
m_BlendMapFile = BlendMapFile;
pd3dDevice = pDevice;
m_pCamera = pCamera;
TerrainBoolMap = new bool[(m_Size+1)*(m_Size+1)];
TerrainData = new TERRAINDATA[(m_Size+1)*(m_Size+1)];
LoadTerrainData(m_HeightMapFile);
ComputeRoughness();
}
void CTerrainTile: estoryTerrainTile()
{
SAFE_DELETE_ARRAY(TerrainData); //出错了,55555
SAFE_DELETE_ARRAY(TerrainBoolMap);
}
错误信息如下:
DAMEGE: after Normal block (#577) at 0xXXXXXXX
出错位置在dbgheap.c中,就是这里没过:
if (!CheckBytes(pbData(pHead) + pHead->nDataSize, _bNoMansLandFill, NoMansLandSize))
_RPT3(_CRT_ERROR, "DAMAGE: after %hs block (#%d) at 0x%p.\n",
szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
pHead->lRequest,
(BYTE *) pbData(pHead));
只声明一个CTerrainTile对象没有这个问题,但我现在同时渲染9个TerrainTile,退出时就成这样了~~~
|
|