单文件内存检测使用的代码
当是单文件的时候,我们只需要把内存检测的相关代码复制到文件中即可。
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int flag = 1; // 定义一个flag,是否开启内存泄漏检测
void *nMalloc(size_t size, const char *filename, int line)
{
void *p = malloc(size);
char buff[128] = {0};
if (flag)
{
// 分配内存的时候创建一个文件,
char buf[128] = {0};
snprintf(buff, 128, "./mem/%p.mem", p);
FILE *fp = fopen(buff, "w");
if (!fp)
{
free(p);
return NULL;
}
fprintf(fp, "[+]%s:%d ,addr: %p, size: %ld", filename, line, p, size);
fflush(fp);
fclose(fp);
}
return p;
}
void nFree(void *ptr)
{
if (flag)
{
char buff[128] = {0};
snprintf(buff, 128, "./mem/%p.mem", ptr);
// 释放内存时候删除文件
if (unlink(buff) < 0)
{
printf("double free: %p", ptr);
return;
}
}
return free(ptr);
}
// __FILE__ 打印具体是哪个文件, __LINE__ 打印是哪一行
#define malloc(size) nMalloc(size, __FILE__, __LINE__)
#define free(ptr) nFree(ptr)
int main()
{
void *p1 = malloc(5);
void *p2 = malloc(10);
void *p3 = malloc(15);
void *p4 = malloc(10);
free(p1);
free(p3);
free(p4);
}