C++ DirectX程序在窗口模式下销毁时引发异常

C++ DirectX程序在窗口模式下销毁时引发异常,c++,directx,directx-11,C++,Directx,Directx 11,当我尝试使用Rastertek DirectX 11教程之一时,就会出现问题 我将const bool全屏值更改为false,因此程序在窗口模式下运行 我将窗口样式从CLIPPINGWINDOW更改为OVERLAPPEDWINDOW 它工作正常,只是当窗口被破坏时程序抛出异常: FrustumCulling.exe中0x779715ee处未处理的异常:0xC0000005:访问冲突读取位置0xfeeeff5e。 现在是第16课 我所做的唯一修改是: 在图形类h中 const bool FU

当我尝试使用Rastertek DirectX 11教程之一时,就会出现问题

  • 我将
    const bool全屏值
    更改为
    false
    ,因此程序在窗口模式下运行
  • 我将窗口样式从
    CLIPPINGWINDOW
    更改为
    OVERLAPPEDWINDOW
它工作正常,只是当窗口被破坏时程序抛出异常:

FrustumCulling.exe中0x779715ee处未处理的异常:0xC0000005:访问冲突读取位置0xfeeeff5e。 现在是第16课

我所做的唯一修改是:

图形类h中

const bool FULL_SCREEN=true//false


您是否仍在全屏模式下设置swapchain? 当我遇到这个问题时,将其添加到DxClass的析构函数解决了这个问题

if(_swapChain != nullptr)
{
            _swapChain->SetFullscreenState(false, NULL);  
            _swapChain->Release();
            _swapChain = nullptr;
}
根据其中一个教程中的Rastertek评论,swapchain在发布之前必须将全屏设置为false


设置
DXGI\u SWAP\u CHAIN\u DESC
时,请确保使用的是
swapChainDesc.Windowed=!全屏
而不是文字布尔值,并确保将全屏设置为false,
FULL\u SCREEN=true//false
不会这样做,也不应该编译。

您是否仍在全屏模式下设置swapchain? 当我遇到这个问题时,将其添加到DxClass的析构函数解决了这个问题

if(_swapChain != nullptr)
{
            _swapChain->SetFullscreenState(false, NULL);  
            _swapChain->Release();
            _swapChain = nullptr;
}
根据其中一个教程中的Rastertek评论,swapchain在发布之前必须将全屏设置为false


设置
DXGI\u SWAP\u CHAIN\u DESC
时,请确保使用的是
swapChainDesc.Windowed=!全屏
而不是文字布尔值,并确保将全屏设置为false,
FULL\u SCREEN=true//false
不会这样做,也不应该编译。

需要更多详细信息,例如您在哪个教程上,以及教程的编号。在哪一行发生此错误?您可能正试图在swapChain->Release()上使用已发布的com对象(例如在清理方法中);第行出现此错误。您的代码是否真的有“const bool FULL_SCREEN=true//false”;因为在注释掉终止分号后,这不会编译,除非它与下一行合并成有效语句(这可能会中断很多)。我认为这很可能不是字面上你改变了线,但我想我提到它,以防万一……需要更多的细节,如你在哪一个教程,如在教程的数量。在哪一行发生这种错误?您可能正试图在swapChain->Release()上使用已发布的com对象(例如在清理方法中);第行出现此错误。您的代码是否真的有“const bool FULL_SCREEN=true//false”;因为在注释掉终止分号后,这不会编译,除非它与下一行合并成有效语句(这可能会中断很多)。我认为这很可能不是字面上你改变了线,但我想我提到它,以防万一…