覆盖malloc以记录分配大小

我正在尝试使用一些代码在tcpdump中为我的项目记录mallocs,我正在使用的代码是:

#include  unsigned int memCount = 0; void *my_malloc(size_t size) { void *p = malloc(size); memCount = memCount + size; printf("Memory Allocated :%u \n", size return p; } #define malloc(size) my_malloc(size) 

在网上查看了许多类似的问题后,似乎这应该可行,但是我的自定义malloc似乎没有被调用。 任何帮助将不胜感激,谢谢!

您必须再次#define每个源文件中的malloc宏 – 因此通过包含定义宏的头文件来执行此操作。

您的问题是,当您期望调用真正的malloc时, my_malloc会调用malloc#define 。 原因是预处理器还将malloc转换为my_malloc

如果我们只是预处理以下内容:

 #define malloc(size) my_malloc(size) unsigned int memCount = 0; void *my_malloc(size_t size) { void *p = malloc(size); memCount = memCount + size; printf("Memory Allocated :%zu \n", size); return p; } int main(void) { malloc(123); return EXIT_SUCCESS; } 

你真的会得到:

 unsigned int memCount = 0; void *my_malloc(size_t size) { void *p = my_malloc(size); memCount = memCount + size; printf("Memory Allocated :%zu \n", size); return p; } int main(void) { my_malloc(123); return 0; } 

您需要访问真正的malloc ,这将在此处演示。

它应该,您可能没有使您对实际使用malloc的文件可见。将它放在一个公共标题中,包含在所有实现文件中。

编辑:如果问题是函数调用自身,你应该在函数声明移动define