Задать вопрос
@leanid

Утечка памяти при использовании std::thread в visual studio 2012?

Следующий код дает две утечки памяти, одна — явная(для теста), другая не пойму откуда, судя по всему в реализации с++ библиотеки от Microsoft.

Подскажите, как с этим бороться. Заранее благодарю.

#include <thread>
#include <iostream>

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

void func(int param)
{
	std::cout << param << "\n";
}

int main()
{
	int tmpDbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
	// always perform a leak check just before app exits.
	tmpDbgFlag |= _CRTDBG_LEAK_CHECK_DF;
	_CrtSetDbgFlag(tmpDbgFlag);

	int* ptr_leak = new int(0xF0F0F0F0);

	{
		std::thread t(&func, 1); // second memory leak! WHY? Can I do something?
		if (t.joinable())
		{
			t.join();
		}
	}
	return 0;
}



Результат запуска отладочной версии:

Detected memory leaks!
Dumping objects ->
{302} normal block at 0x0046AED0, 44 bytes long.
Data: < > 01 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00
{150} normal block at 0x0046AE48, 4 bytes long.
Data: < > F0 F0 F0 F0
Object dump complete.
The program '[1576] test_thread.exe' has exited with code 0 (0x0).


Я все это пробую на visual studio 2012 express
  • Вопрос задан
  • 3864 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@vScherba
Известный баг MS CRT.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы