#undef realloc
#undef free
这个主要为了解决 引用了 头文件 memglobal.h 会造成递归调用. Linux上还有一种思路, 不包含这个头文件
链接时候gcc 指定就可以. 但是 vs 是自动推导编译, 如果不引入它推导不出来. 后面就采用了上面通用的做法.
上面思路是, 先启动 全局内存监测功能, 再通过特殊宏,替代原先的申请和释放函数. 来达到目的.
测试文件 main.c
#include <stdio.h>
#include <stdlib.h>
#include "memglobal.h"
/*
* 内存全局计数, 检测内存是否越界
*/
int main(int argc, char* argv[]) {
// 开启内存全局计数
mg_start();
int *p = malloc(16);
p = calloc(12, 2);
*p = 154;
puts("就这样!");
p = realloc(NULL, 6);
puts("测试这样行!");
return 0;
}
测试运行结果如下
最终打印日志是
好. 到这里 关于内存全局检测的技巧解释和实现完毕. 很简单很好用.
重点是理解上面两种方式思路. 哈哈, 是不是发现 好神奇的内存泄露, 内存越界, 内存泄露监测也不过如此.
开发, 写代码很简单, 但化为生产力就很难了, 也许需要更多有能力的一起转换.
后记
错误是难免, 欢迎吐槽交流, 拜~~. 希望早睡早起.