Цитата(Ink @ Aug 3 2010, 14:18)
переопределяете malloc и free макросами
Так и сделал с использованием __LINE__ и __FILE__ помимо всего прочего реализовал массив вызовов (стек) использования пар malloc-free и realloc-free.
При вызове free записывал высвобождаемый фрагмент в локальную кучку и сравнивал все фрагменты после выхода из программы - если сегмент в оригинальной памяти был повреждён (запись), то это сразу стало явным. Потом выделить нужный фрагмент кода- дело техники: точка остановки по записи в память.
Другое дело что таким способом сложно отлаживать программы, когда происходит чтение из высвобожденной памяти.
Хотя наверняка можно обыграть "переопределив" на С операцию индексирования [] функцией получения по индексу.
Но это уже скорее С++ с его ad-hoc полиморфизмом.