理想情况下,您应该使用一些内存分析工具,但如果没有相同的工具,您可以尝试按照您的计划实现自己的泄漏检测器。
您可以通过包装器调用 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;
}