В идеале, вам нужен какой-нибудь инструмент для профилирования памяти, но в отсутствие этого вы можете попытаться реализовать свой собственный детектор утечек, как вы планируете.
Вы можете просто вызвать библиотеку malloc
и free
версии через вашу обертку.
Вот схема, которую вы можете попытаться реализовать:
Ваша функция оболочки должна реализовывать функциональность, в которой ваша оболочка для malloc
хранит номер строки, имя файла, запрашиваемый размер и адрес, являющийсявозвращается malloc в связанном списке.
Как получить имя файла и номер строки?
Подсказка: используйте __FILE__
, __LINE__
Оболочка free
должна проверять адрес, отправляемый дляосвобождение от списка и удалить запись из связанного списка.
В конце программы вы должны распечатать содержимое этого связанного списка, в котором указан объем памяти, имя файла и номер строки, из которой был выделен буфер.
Обновление:
Как вы сопоставляете программы malloc
вызовы собственных вызовов-оболочек без бесконечной рекурсии?
Через умное использованиеМакросы!
#define malloc(X) my_malloc( X, __FILE__, __LINE__, __FUNCTION__)
void* my_malloc(size_t size, const char *file, int line, const char *func)
{
void *p = malloc(size);
printf ("Allocated = %s, %i, %s, %p[%li]\n", file, line, func, p, size);
/*Link List functionality goes in here*/
return p;
}