The heap gives you freedom. It also remembers every block you forgot to free.
char *gm_strdup(const char *src)
size_t free_str_array(char **arr)
char *str_join(char **parts, size_t n, char sep)
void *arena_alloc(size_t n)
void *heap_alloc(size_t n)
void *gm_calloc(size_t nmemb, size_t size)
char **split(char *str, char *charset)
void *mem_resize(void *ptr, size_t old_size, size_t new_size)
v0.40: Create exercises. Challenge the community.