Причина, по которой вы можете захотеть это сделать, заключается в том, что после нескольких манипуляций с storage
вы можете не помнить, что нужно free()
.Наличие копии storage_p
, которую вы никогда не изменяете, помогает предотвратить утечки памяти, потому что вы можете позвонить free(storage_p)
позже, независимо от того, что случилось с storage
.Перевесит ли это уже упомянутые недостатки, зависит от деталей ситуации.
Пример:
int *storage;
storage = malloc(sizeof(int[GROW_BY]));
storage++;
free(storage); //SEGFAULT or MEMORY LEAK or OTHER BAD STUFF
storage = NULL;
против
int *storage, *storage_p;
storage = malloc(sizeof(int[GROW_BY]));
storage_p = storage;
storage++;
free(storage_p);
storage_p=NULL;
storage = NULL;