c/c++语言开发共享覆盖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

      以上就是c/c++开发分享覆盖malloc以记录分配大小相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519453.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐