当我声明一个我不使用的向量时,泄漏16个字节的内存

时间:2015-08-20 17:38:12

标签: c++ memory-leaks directx

所以在我的DirectX Demo中,我想创建一个std :: threads的向量来存储我稍后在程序中创建的任何线程。然而,在创建所述向量时,我意识到我总是泄漏16个字节的内存。

我决定将其更改为整数向量,以确保它不是导致问题的线程类;果然,内存泄漏仍然存在。当我注释掉向量的声明(我从未在其余的代码中使用)时,我不再泄漏内存。请注意,这不是指针向量,也不是指针本身。

任何人都能解释为什么我会泄漏这个?

class DEMO_APP
{   
HINSTANCE                       application;
WNDPROC                         appWndProc;
HWND                            window;

// Interface
ID3D11Device*                   device;
ID3D11DeviceContext*            deviceContext;
IDXGISwapChain*                 swapChain;
ID3D11RenderTargetView*         renderTargetView;
ID3D11DepthStencilView*         depthStencilView;
ID3D11DepthStencilState*        DSLessEqual;
ID3D11BlendState*               blendState;

// Threads
std::vector<int>                loadingThreads; // <- Why I can't sleep at night
//std::vector<ID3D11DeviceContext*> deferredContexts;
ID3D11DeviceContext*            deferredContext;
  

检测到内存泄漏!   转储对象 - &gt;   {212}正常阻塞位于0x0000000C620C1930,长度为16个字节。数据:&lt; &GT; 98 D3 C8 F4 F6 7F 00 00 00 00 00 00 00 00 00 00   对象转储完成。

当我初始化项目时也会发生这种情况,而不是在大多数泄漏发生时关闭期间。设置_CrtSetBreakAlloc(212);也不会导致中断,所以就这样。

1 个答案:

答案 0 :(得分:1)

修正了这个问题;在我的一个调试会话期间,我将DEMO_APP的实例设为全局。因此,它的析构函数不会在main的末尾被调用。关闭函数仍然被调用,因此没有其他内存被泄漏但是向量。谢谢大家!