覆盖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
。