#ifndef LEAK_DETECTOR_C_H #define LEAK_DETECTOR_C_H // 文件名最大长度 #define FILE_NAME_LENGTH 256 // 内存泄漏信息输出文件 #define OUTPUT_FILE "leak_info.txt" // 用宏重定义 malloc、calloc 和 free,为其添加文件名和行号信息 #define malloc(size) xmalloc (size, __FILE__, __LINE__) #define calloc(elements, size) xcalloc (elements, size, __FILE__, __LINE__) #define free(mem_ref) xfree(mem_ref) // 用于记录每一次内存分配的信息结构体 struct _MEM_INFO { void *address; // 分配的内存地址 unsigned int size; // 分配的大小 char file_name[FILE_NAME_LENGTH]; // 分配发生的文件名 unsigned int line; // 分配发生的代码行号 }; typedef struct _MEM_INFO MEM_INFO; // 内存泄漏记录结构体,使用链表形式组织 struct _MEM_LEAK { MEM_INFO mem_info; // 内存信息 struct _MEM_LEAK *next; // 指向下一个节点的指针 }; typedef struct _MEM_LEAK MEM_LEAK; // 添加一条内存分配信息记录 void add(MEM_INFO alloc_info); // 删除某个位置的内存记录 void erase(unsigned pos); // 清空所有内存记录 void clear(void); // 自定义 malloc:记录内存分配位置 void *xmalloc(unsigned int size, const char *file, unsigned int line); // 自定义 calloc:记录内存分配位置 void *xcalloc(unsigned int elements, unsigned int size, const char *file, unsigned int line); // 自定义 free:在释放内存时移除记录 void xfree(void *mem_ref); // 添加一条内存分配记录 void add_mem_info(void *mem_ref, unsigned int size, const char *file, unsigned int line); // 移除某个内存记录(在调用 free 时使用) void remove_mem_info(void *mem_ref); // 生成内存泄漏报告 extern void report_mem_leak(void); extern void dump_mem_leak(void); #endif