gpt4 book ai didi

c++ - DirectX 11 内存重新分配错误

转载 作者:行者123 更新时间:2023-11-28 07:32:35 25 4
gpt4 key购买 nike

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

的异常

"Unhandled exception at 0x00CE4A75 in AI.exe: 0xC0000005: Access violation reading location 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;
}

我也检查了他们每个的内容,他们都是空的无法读取内存,那么为什么m_inputLayout会不同并导致异常?可能的原因是什么。

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

最佳答案

请记住,“if”运算符仅测试 bool 条件。虽然在不指定“!= 0”的情况下直接使用“if”进行空值检查很常见,但它会将您的指针隐式转换为 bool 值。如果您的指针为 0,则该值为假,如果它不是零,则该值为真。即使变量尚未初始化,内存位置也可以保存任何垃圾值,但在 Debug模式下,您通常会得到 0xCCCCCCCC 或其他一些已知常量来帮助您找出问题所在。所以,在我看来,你的变量还没有被初始化。如果您单步执行代码,您应该看到它的值为“0xCCCCCCCC”。根据你的变量命名,我推测它是一个成员变量,所以好的做法是在它所属的类的初始化列表中将它设置为 NULL。

关于c++ - DirectX 11 内存重新分配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17384169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com