c++ - 当我声明一个我不使用的 vector 时泄漏 16 字节的内存

标签 c++ memory-leaks directx

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

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

谁能解释为什么我会出现这种泄漏?

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;

Detected memory leaks! Dumping objects -> {212} normal block at 0x0000000C620C1930, 16 bytes long. Data: < > 98 D3 C8 F4 F6 7F 00 00 00 00 00 00 00 00 00 00 Object dump complete.

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

最佳答案

修复了问题;在我的一个调试 session 中,我将 DEMO_APP 的实例设为全局。因此它的析构函数没有在 main 的末尾被调用。关闭函数仍在被调用,所以除了 vector 之外没有其他内存被泄漏。谢谢大家!

关于c++ - 当我声明一个我不使用的 vector 时泄漏 16 字节的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124790/

相关文章:

c++ - 库可以包含多个绑定(bind)吗

c++ - 从二进制数据恢复 MP3 文件

java - Java 上的 DirectX 可能吗?

c - DirectX 游戏的窗口 GUI 似乎有问题

c++ - m = XMMatrixIdentity() 后崩溃 - 类中的对齐内存?

c++ - 像 glColorPointer 这样的 OpenGL API 如何知道作为指针传递的数组的大小?

c++ - 将直接值传递给 CreateIoCompletionPort() 的 CompletionKey 参数

ios - iPad 中调用者此时不拥有的对象的引用计数的不正确减少

python - 它有内存泄漏吗?

ios - 内存管理 : does this code has a memory leak?