Valgrind не обнаруживает утечку в глобальном указателе
Я valgrind --leak-check=full test.cpp
на следующий код
#include <iostream>
int* p = new int[42]; // no leak reported
int main()
{
p[0] = 42; // use it
std::cout << p[0];
}
и нет никакой утечки сообщается:
==37293== LEAK SUMMARY:
==37293== definitely lost: 0 bytes in 0 blocks
==37293== indirectly lost: 0 bytes in 0 blocks
==37293== possibly lost: 0 bytes in 0 blocks
всякий раз, когда я перемещаю определение int* p = new int[42];
внутри main()
, поэтому он имеет автоматическую продолжительность хранения, valgrind обнаруживает утечку памяти. Почему он не обнаруживает утечку для статических объектов длительности хранения? Я что-то упускаю?
1 ответов
Они все еще доступны, и поэтому не считаются утечка. Если вы хотите показать даже достижимые блоки, pass --leak-check=full --show-leak-kinds=all
к Valgrind.
Как правило, такого рода "утечка" не является ошибкой. В вашем примере кода нет "правильного места" для размещения соответствующего delete
.