我正在尝试使用一些代码在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似乎没有被调用。非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
您必须再次#define
每个源文件中的malloc宏 - 因此可以通过包含定义宏的头文件来实现。
答案 1 :(得分:0)
它应该,您可能没有使define
对您实际使用malloc
的文件可见。将它放在一个公共标题中,包含在所有实现文件中。
编辑:如果问题是函数调用了自己,你应该在函数声明之后移动define
。
答案 2 :(得分:0)
您的问题是,当您希望调用真实#define
时,malloc
会调用my_malloc
malloc
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
您需要访问真实的{{1}},其中展示了here。