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);

image

posted @ 2025-08-20 11:32  我不是萧海哇~~~  阅读(5)  评论(0)    收藏  举报