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» и «C ++» для двух языков, которые, скорее всего, будут использоваться с Valgrind.)