【问题标题】:Directx 11 CreateVertexShader memory leakDirectx 11 CreateVertexShader 内存泄漏
【发布时间】:2019-11-06 08:39:54
【问题描述】:

您好,我在创建和释放顶点着色器时发生了内存泄漏。

这是我编译的着色器https://pastebin.com/raw/4w8tyY1n

这是我非常简单的代码,我只是创建设备和上下文,然后是顶点着色器,然后我都在一个循环中释放。

HRESULT hr;

while(true)
{
    ID3D11Device* device;
    ID3D11DeviceContext* deviceCtx;
    ID3D11VertexShader* vertexShader;

    hr = D3D11CreateDevice (
        nullptr,
        D3D_DRIVER_TYPE_HARDWARE,
        nullptr,
        D3D11_CREATE_DEVICE_BGRA_SUPPORT,
        nullptr,
        0,
        D3D11_SDK_VERSION,
        &device,
        nullptr,
        &deviceCtx);

    if (SUCCEEDED (hr))
    {
        UINT Size = ARRAYSIZE (g_VS);
        hr = device->CreateVertexShader (g_VS, Size, nullptr, &vertexShader);
        if (SUCCEEDED (hr))
        {
            vertexShader->Release ();
        }

        deviceCtx->Release ();
        device->Release ();
    }
}

我对此感到困惑,我已经阅读了所有可能的 msdn 文档,但我只是不知道可能是什么问题。

【问题讨论】:

  • 是什么让你认为你有内存泄漏?你检查什么指标?您是否了解“while(true)”循环具有可能看起来像内存泄漏但不完全是内存泄漏的副作用?代码对我来说运行良好。
  • 嗨,我发现当我运行代码时,内存上升到 450 MB,然后应用程序在 hr = device->CreateVertexShader (g_VS, Size, nullptr, &vertexShader);在 D3D11.exe 中的 0x771D5D15 (ntdll.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x00000008。发生当我评论 CreateVertexShader 行时没有问题,我一直低于 20 兆字节。
  • 好的所以我发现它只发生在英特尔 GPU 上,它似乎可能与这里的问题相同forums.intel.com/s/question/0D70P0000068e6USAQ/…
  • 使用 C++ 时,您不应该依赖手动 AddRef``` / Release`` 调用 COM 对象,因为它太容易错过。只需使用ComPtr

标签: memory-leaks directx directx-11 vertex-shader


【解决方案1】:

好的,问题出在英特尔® 高清显卡 620 驱动程序上,更新解决了我的所有问题。

【讨论】:

    猜你喜欢
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    相关资源
    最近更新 更多