Yes, malloc(0) often returns a minimum size pointer instead of returning NULL. That is why I don't think of this behavior as a bug.
You may better understand my (initial) surprise if you see my original code:
void MELHashMapBucketListDeinit(MELHashMapBucketList * _Nonnull self) {
free(self->memory);
self->memory = NULL;
self->count = 0;
self->capacity = 0;
}
Using free, I overlooked the fact that it would instead be calling malloc when self->memory is NULL.
It was easy to fix the leak once I understood what was going on:
if (self->memory != NULL) {
playdate->system->realloc(self->memory, 0);
self->memory = NULL;
}
No need to go that far
, I think a simple mention of this behavior in the documentation should be enough.
(And talking about the documentation, playdate->sprite->free is actually called playdate->sprite->freeSprite).