首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectX 11内存分配错误

DirectX 11内存分配错误
EN

Stack Overflow用户
提问于 2013-06-29 19:59:17
回答 2查看 223关注 0票数 0

我最近芬兰一个简单的2d游戏引擎。在我的项目的精灵模块中,有一个关于

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

我不知道是什么原因造成的,因为所有的东西都是初始化和解除分配的。这个异常似乎发生在if( m_inputLayout ) m_inputLayout->Release()中。其他一切都很好。代码就在下面。

代码语言:javascript
复制
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会有所不同并导致离奇呢?可能的原因是什么。

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

EN

回答 2

Stack Overflow用户

发布于 2013-06-29 22:05:15

记住,"if“运算符只测试布尔条件。虽然直接对空检查使用"if“而不指定”!= 0“是很常见的,但它会隐式转换指向布尔值的指针。如果指针为0,则该值为false,如果它不是零,则该值为true。在未初始化变量的情况下,内存位置可以保存任何垃圾值,但在调试模式下,通常会得到0xCCCCCC或其他已知的常量,以帮助您了解问题所在。所以,在我看来,你的变量还没有初始化。如果您步进代码,您应该看到它的值是“0xCCCCCC”。通过对变量的命名,我假定它是一个成员变量,所以好的做法是在它所属的类的初始化器列表中将它设置为NULL。

票数 1
EN

Stack Overflow用户

发布于 2013-07-29 04:20:19

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17384169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档