Я начинаю с C ++ и использую memcheck для проверки моих программ на утечки памяти.
Если (когда …) есть утечки, я получаю Unfreed memory allocations remaining
выход, который использует new
, malloc
и т.д., которые не были освобождены. Они обычно сопровождаются исходным файлом и номером строки размещения, что позволяет легко исправить.
Иногда, хотя исходный модуль указан как unknown line:0
, для звонков на new
в моем случае. Если memcheck знает вызов new
было сделано, как получается, что он не может сказать, откуда это взялось? Я просто пытаюсь обдумать это, чтобы иметь представление о том, откуда эти утечки.
Я полагаю, что он просто не может правильно решить трассировку стека. Это случается с такими инструментами (VLD, Deleaker и т. Д.), Когда они либо пытаются разрешить трассировку стека в быстром режиме (например, чтение EBP / ESP на x86), а указатели фреймов пропустили, либо когда они пытаются разрешить трассировку стека, используя отладочную информацию, и это информация неверна или просто отсутствует.
В большинстве случаев трассировка стека может быть разрешена правильно. Иногда — нет.
Других решений пока нет …