今天遇到一个bug,有如下一段代码:
LPDIRECT3DVERTEXBUFFER9 pVB;
pVB->Lock( 0, 0, (void**)&pTemp, 0 );
int start = 0;
int end = 20;
for(int i = start; i < end; i++)
{
(pTemp + i)->color = 0xffff0000;
}
.........
pVB->Unlock();
.....
pDevice->DrawIndexedPrimitive( D3DPT_LINELIST, 0, 0, VBNUM, 0, 1 ); bug的现象是,程序发布后给客户试用,结果出现崩溃,但是在我们的测试机上从不会出现问题,于是仔细查看代码,发现上面这个vertexbuffer在创建时只创建了18个,而我在上述赋值时将end设置成20造成越界。这种bug往往只是一句话就解决了,但是找到原因很费劲,所以以后遇到类似情况一定要小心!!!!!
本文介绍了一个关于Direct3D中顶点缓冲区越界访问导致的程序崩溃问题。在实际部署过程中,由于对顶点缓冲区的大小判断失误,在特定条件下造成了内存访问越界。文章详细分析了问题的原因,并提供了相应的解决办法。
1万+

被折叠的 条评论
为什么被折叠?



