Valgrind - отличный отладчик памяти, и у него есть опция --trace-malloc=yes
, которая производит что-то вроде этого:
--16301-- malloc(8) = 0x4EAD748
--16301-- free(0x4EAD748)
--16301-- free(0x4EAD498)
--16301-- malloc(21) = 0x4EAD780
--16301-- malloc(8) = 0x4EAD838
--16301-- free(0x4EAD6F8)
--16301-- calloc(1,88) = 0x4EAD870
--16301-- realloc(0x0,160)malloc(160) = 0x4EB1CF8
--16301-- realloc(0x4EB9F28,4) = 0x4EBA060
Есть ли инструмент, который анализирует этот вывод и сообщает мне для каждого адреса, правильно ли он был выделен и освобожден в соответствующей паре?
GCC имеет нечто похожее с функцией mtrace()
и инструментом командной строки mtrace
, но формат отличается.
Бонусный вопрос: возможно ли вывести фактический адрес рядом с выражением "определенно потерянный"?
(Я отмечаю эти "C" и "С++" для двух языков, которые, скорее всего, будут использоваться с Valgrind.)