我正试图使用一点代码在tcpdump中为我的一个项目记录mallocs,因此我使用的代码是:
#include <stdlib.h>
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
,这里演示了它。
应该这样做,你可能没有让define
对你实际使用malloc
的文件可见。把它放在一个公共的头中,所有实现文件都包含这个头。
EDIT:如果问题是函数正在调用自己,则应将define
移到函数声明之后。