私はまだ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
}
しかし、私は明らかにポインター演算が間違っています。ただしvoid* memory
、構造体の最後に a を追加して別の malloc を実行すると、うまくいくように見えますが、問題は、そうするとヘッダーが実際に見つからmy_free
ないことです。基本的にヘッダーを先頭に追加しようとしているので、逆ポインター演算を実行してヘッダーを解放できます。
void my_free(void* memory) {
MemoryInfo* mem = memory - sizeof(MemoryInfo); // not correct either
allocCount--;
free(mem);
}
ここで何が間違っていますか?