#include <stdio.h>
#include <stdlib.h>
void * debug_malloc(size_t size, const char *file, int line, const char *func)
{
void *p;
p = malloc(size);
printf("%s:%d:%s:malloc(%ld): p=0x%lx\n", file, line, func, size, (unsigned long)p);
return p;
}
#define malloc(s) debug_malloc(s, __FILE__, __LINE__, __func__)
#define free(p) do { \
printf("%s:%d:%s:free(0x%lx)\n", __FILE__, __LINE__, \
__func__, (unsigned long)p); \
free(p); \
} while (0)
intmain(int argc, char *argv[])
{
char *p;
p = malloc(1024);
free(p);
return 0;
}
[root@localhost test]# gcc mallo_free.c
[root@localhost test]# ./a.out
mallo_free.c:19:main:malloc(1024): p=0x2575010
mallo_free.c:20:main:free(0x2575010)

本文展示了一个C语言程序中自定义内存分配与释放的过程。通过重写malloc与free函数增加调试信息,包括记录调用文件名、行号及函数名等,便于跟踪内存使用情况。
236

被折叠的 条评论
为什么被折叠?



