Visual Studio中的内存泄漏

Arn*_*aud 4 c++ multithreading memory-leaks visual-studio c++11

我在Visual Studio Pro 2012上使用std :: thread使用这个简单的代码有内存泄漏:

#include <thread>

void f(){}

int main(){
    std::thread t(f);
    t.join();
    _CrtDumpMemoryLeaks();
    return 0;}
Run Code Online (Sandbox Code Playgroud)

Win32输出:

Detected memory leaks!
Dumping objects ->
{293} normal block at 0x00A89520, 44 bytes long.
 Data: <                > 01 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00 
Object dump complete.
Run Code Online (Sandbox Code Playgroud)

x64输出:

Detected memory leaks!
Dumping objects ->
{293} normal block at 0x00000000003FCB00, 72 bytes long.
 Data: <                > 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
Object dump complete.
Run Code Online (Sandbox Code Playgroud)

如果我评论main方法的两个第一行,我没有内存泄漏.

它从何而来 ?

编辑:泄漏仍然在这里与该代码:

#include <thread>

void f(){}

int main(){
    {
        std::thread t(f);
        t.join();
    }
    _CrtDumpMemoryLeaks();
    return 0;}
Run Code Online (Sandbox Code Playgroud)

Seb*_*edl 9

众所周知,CrtDumpMemoryLeaks是不可靠的.当您第一次使用std :: thread时,标准库可能会故意泄漏一次性分配.要查明是否存在真正的内存泄漏,请尝试以下操作:

for (int i = 0; i < LIMIT; ++i) {
  std::thread t(f); t.join();
}
_CrtDumpMemoryLeaks();
Run Code Online (Sandbox Code Playgroud)

然后在增加LIMIT时查看泄漏量是否增加.如果没有,你没事.