覆盖malloc以记录分配大小

时间:2012-03-14 12:49:06

标签: c malloc

我正在尝试使用一些代码在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似乎没有被调用。非常感谢任何帮助,谢谢!

3 个答案:

答案 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