我仍然对我的 C 生锈了,我只是没有弄清楚这一点。我想做的是实现我自己的 malloc,这样我就可以跟踪分配并调试对 free() 的丢失调用。我有一个这样的标题:
typedef struct MemoryInfo {
mem_Kind kind;
unsigned int id;
struct MemoryInfo* prev;
struct MemoryInfo* next;
} MemoryInfo;
我的自定义 malloc 看起来像这样:
void* my_malloc(mem_Kind kind, unsigned int size) {
MemoryInfo* mem;
allocCount++;
mem = (MemoryInfo*)malloc(sizeof(MemoryInfo) + size);
mem->id = id;
mem->kind = kind;
// set prev/next...
return mem + sizeof(MemoryInfo); // return pointer to memory after header
}
但我显然弄错了我的指针算术,因为它很快就爆炸了。但是,如果我将 a 添加void* memory
到我的结构的末尾并执行另一个 malloc ,那么它似乎做得很好,问题是my_free
如果我这样做我真的无法找到标题。我试图基本上预先添加标题,以便我可以做一些反向指针算法来免费获取标题。
void my_free(void* memory) {
MemoryInfo* mem = memory - sizeof(MemoryInfo); // not correct either
allocCount--;
free(mem);
}
我在这里做错了什么?