Memory Deallocation
1 / 5
void my_free(void *ptr) {
if (ptr == NULL) return;
block_header_t *block = payload_to_block(ptr);
block->free = 1; // That's it!
}
[A] [B] [C] <- heap top
Free B? Can't shrink heap.
C is in the way.
Just mark B for reuse.
// Magic number check
if (block->magic != BLOCK_MAGIC) abort();
// Double-free check
if (block->free) abort();