我最近芬兰一个简单的2d游戏引擎。在我的项目的精灵模块中,有一个关于
“AI.exe: 0xC0000005中0x00CE4A75处未处理的异常:访问冲突读取位置0xCCCCCC。”
我不知道是什么原因造成的,因为所有的东西都是初始化和解除分配的。这个异常似乎发生在if( m_inputLayout ) m_inputLayout->Release()中。其他一切都很好。代码就在下面。
CAIGESprite::~CAIGESprite(void)
{
if( m_mvpCB ) m_mvpCB->Release();
if( m_alphaBlendState ) m_alphaBlendState->Release();
if( m_colorMapSampler ) m_colorMapSampler->Release();
if( m_colorMap ) m_colorMap->Release();
if( m_vertexBuffer ) m_vertexBuffer->Release();
if( m_inputLayout ) m_inputLayout->Release();
if( m_solidColorPS ) m_solidColorPS->Release();
if( m_solidColorVS ) m_solidColorVS->Release();
if( m_textureFile ) delete m_textureFile;
if( m_shaderFile ) delete m_shaderFile;
m_shaderFile = nullptr;
m_textureFile = nullptr;
m_solidColorVS = NULL;
m_solidColorPS = NULL;
m_inputLayout = NULL;
m_vertexBuffer = NULL;
m_colorMap = NULL;
m_colorMapSampler = NULL;
m_alphaBlendState = NULL;
m_mvpCB = NULL;
}我还检查了其中每一个的内容,它们都是空的,无法读取内存,那么为什么m_inputLayout会有所不同并导致离奇呢?可能的原因是什么。
如果需要的话我会发布更多的代码。
发布于 2013-06-29 22:05:15
记住,"if“运算符只测试布尔条件。虽然直接对空检查使用"if“而不指定”!= 0“是很常见的,但它会隐式转换指向布尔值的指针。如果指针为0,则该值为false,如果它不是零,则该值为true。在未初始化变量的情况下,内存位置可以保存任何垃圾值,但在调试模式下,通常会得到0xCCCCCC或其他已知的常量,以帮助您了解问题所在。所以,在我看来,你的变量还没有初始化。如果您步进代码,您应该看到它的值是“0xCCCCCC”。通过对变量的命名,我假定它是一个成员变量,所以好的做法是在它所属的类的初始化器列表中将它设置为NULL。
发布于 2013-07-29 04:20:19
构造函数中是否正确地将"m_inputLayout“初始化为null?您可能正在尝试删除尚未创建的无效指针。
https://stackoverflow.com/questions/17384169
复制相似问题