我正在尝试使用一些代码在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