Quand NULL
est adoptée, realloc
est équivalent à malloc
. Le site NULL
peut être utile si vous allouez dans une sorte de boucle et que vous ne voulez pas avoir un cas spécial la première fois que vous allouez.
Pendant que nous y sommes, les façons assez standard d'utiliser malloc et realloc sont :
int* p;
p = malloc(10 * sizeof(int)); //Note that there's no cast
//(also, it could just be int* p = malloc(...);)
int* np = realloc(p, 15 * sizeof(int));
//Note that you keep the old pointer -- this is in case the realloc fails
En guise d'aparté, l'histoire est la principale raison pour laquelle vous voyez les déclarations et les affectations sur des lignes différentes. Dans les anciennes versions du C, les déclarations devaient être placées en premier dans les fonctions. Cela signifiait que même si votre fonction n'utilisait pas une variable avant 20 lignes, vous deviez la déclarer en premier.
Comme vous ne savez généralement pas quelle doit être la valeur d'une variable qui n'est pas utilisée pendant 20 lignes, vous ne pouvez pas toujours l'initialiser à quelque chose de significatif, et vous vous retrouvez donc avec une déclaration et aucune affectation au début de votre fonction.
En C99/C11, il n'est pas nécessaire de déclarer les variables en haut des scopes. En fait, il est généralement suggéré de définir les variables aussi près que possible de leur utilisation.