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.