const int arena_el_sz = sizeof(void**);
int arena_size = arena_el_sz;
void** arena = (void**)malloc(arena_size);
void* my_malloc(int size_mem)
{ void* save = malloc(size_mem);
arena[arena_size/arena_el_sz - 1] = save;
arena_size += arena_el_sz;
arena = (void**)realloc(arena, arena_size);
return save;
}
void do_nothing(void* x){}
#define malloc my_malloc
#define free do_nothing
...
int main()
{
while(!quit) //очень долго исполняющийся код
{ ...
}
#undef free
for(int i = 0; i<arena_size; i++)
{
free(arena[i]);
}
free(arena);
}
Аналогичный дефайн макроса для calloc и другие очевидные фиксы не приведены в целях сокращения листинга.