2015-05-26 4 views
3

У меня очень простая программа на C++.std :: cout вызывает утечку памяти

#include <iostream> 

int main() 
{ 
    std::cout << "HI" << std::endl; 
    return 0; 
} 

Я скомпилирую это на Mac с помощью команды c++ --std=c++11 leak.cpp.

Когда я отладка это с valgrind --leak-check=full ./a.out, я получаю следующий результат:

==2187== HEAP SUMMARY: 
==2187==  in use at exit: 38,906 bytes in 429 blocks 
==2187== total heap usage: 508 allocs, 79 frees, 45,074 bytes allocated 
==2187== 
==2187== LEAK SUMMARY: 
==2187== definitely lost: 0 bytes in 0 blocks 
==2187== indirectly lost: 0 bytes in 0 blocks 
==2187==  possibly lost: 0 bytes in 0 blocks 
==2187== still reachable: 4,096 bytes in 1 blocks 
==2187==   suppressed: 34,810 bytes in 428 blocks 
==2187== Reachable blocks (those to which a pointer was found) are not shown. 
==2187== To see them, rerun with: --leak-check=full --show-leak-kinds=all 

Оказывается, есть 4096 байт, которые «все еще достижимы». Если я удалю оператор cout, то больше нет «все еще доступных» байтов.

Почему это так, что вывод std::cout вызывает утечку памяти?

+0

Вы пробовали [это] (http://stackoverflow.com/questions/30376601/valgrind-memory-still-reachable-with-trivial-program-using-iostream)? – doqtor

ответ

3

Это может быть ложным положительным в отчете об утечке. Valgrind может быть настолько умным; ваша стандартная реализация библиотеки принимает определенные свободы, для которых у Valgrind нет специального случая.

Я буду больше беспокоиться о том, чтобы выяснить, почему эта крошечная программа выполняет 508 распределений, в общей сложности 45 074 байта.

+0

Все еще достижимая не является утечкой. – ivanw

+0

Возможно, некоторые структуры отладки –

Смежные вопросы