c语言之malloc巧妙使用
typedef struct {
void* ptr;
size_t size;
const char* file;
int line;
} AllocInfo;
AllocInfo alloc_table[1024];
int alloc_count = 0;
void* tracked_malloc(size_t size, const char* file, int line) {
void* ptr = malloc(size);
if (ptr) {
alloc_table[alloc_count].ptr = ptr;
alloc_table[alloc_count].size = size;
alloc_table[alloc_count].file = file;
alloc_table[alloc_count].line = line;
alloc_count++;
printf("%s,%d,%x\r\n",file,line,ptr);
}
return ptr;
}
void tracked_free(void* ptr) {
// 查找并移除记录
for (int i = 0; i < alloc_count; i++) {
if (alloc_table[i].ptr == ptr) {
free(ptr);
// 移动数组元素
memmove(&alloc_table[i], &alloc_table[i + 1],
(alloc_count - i - 1) * sizeof(AllocInfo));
alloc_count--;
return;
}
}
// 未找到记录,可能是双重释放
printf("警告:尝试释放未分配的内存!\n");
}
int check_malloc() {
return alloc_count;
}
// 使用宏简化调用
#define MALLOC(size) tracked_malloc(size, __FILE__, __LINE__)
#define FREE(ptr) tracked_free(ptr)
使用:
char *p=(char *)MALLOC(24);
FREE(p);


浙公网安备 33010602011771号