0

我最近完成了一个简单的 2d 游戏引擎。在我项目的 sprite 模块中,有一个关于

“AI.exe 中 0x00CE4A75 处的未处理异常:0xC0000005:访问冲突读取位置 0xCCCCCCCC。”

我不知道是什么原因造成的,因为一切都被初始化和释放。这个异常似乎发生在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;
}

我还检查了它们每个的内容,它们都是空的Unable to read memory,那么为什么 m_inputLayout 会有所不同并导致异常呢?可能的原因是什么。

如果需要,我会发布更多代码。

4

2 回答 2

1

请记住,“if”运算符仅测试布尔条件。虽然通常直接使用“if”进行空检查而不指定“!= 0”,但它确实将指针隐式转换为布尔值。如果您的指针为 0,则该值为 false,如果它不为零,则该值为 true。即使变量尚未初始化,内存位置也可以保存任何垃圾值,但在调试模式下,您通常会得到一个 0xCCCCCCCC 或其他一些已知常量来帮助您找出问题所在。因此,在我看来,您的变量尚未初始化。如果您单步执行代码,您应该会看到其值为“0xCCCCCCCC”。通过命名你的变量,我假设它是一个成员变量,

于 2013-06-29T22:05:15.390 回答
0

“m_inputLayout”是否在构造函数中正确初始化为 null?您可能正在尝试删除尚未创建的无效指针。

于 2013-07-29T04:20:19.577 回答