The reason you want to do this is that after several manipulations with storage you may not remember what to do with free() . Having storage_p as a copy that you never modify helps prevent a memory leak, because you can call free(storage_p) later, regardless of what happened to storage . If this outweighs the disadvantages mentioned, it depends on the details of the situation.
Example:
int *storage; storage = malloc(sizeof(int[GROW_BY])); storage++; free(storage);
against
int *storage, *storage_p; storage = malloc(sizeof(int[GROW_BY])); storage_p = storage; storage++; free(storage_p); storage_p=NULL; storage = NULL;
source share