Un malloc() est-il nécessaire avant un realloc()?
Puisque j'avais lu realloc agira comme malloc si la taille pointée est 0, Je l'utilisais sans malloc(), à condition que le pointeur soit statique, global ou explicitement défini sur NULL si automatique.
Cependant, je remarque que beaucoup de programmeurs essaient de le définir ou de le définir sur malloc (1). Est-il nécessaire?
2 réponses
À partir de ouvrir les spécifications des groupes :
Si ptr est un pointeur nul, realloc() doit être équivalent à malloc() pour la taille spécifiée.
Si ptr ne correspond pas à un pointeur renvoyé plus tôt par calloc(), malloc () ou realloc() ou si l'espace a déjà été désalloué par un appel à free() ou realloc(), le le comportement est indéfini.
malloc
n'est pas nécessaire, vous pouvez utiliser realloc
seulement.
malloc(n)
est équivalent à realloc(NULL, n)
.
Cependant, il est souvent plus clair d'utiliser malloc
au lieu de spécial sémantique de realloc
. Ce n'est pas une question de ce qui fonctionne, mais ne pas confondre les gens qui lisent le code.
(Edit: mention supprimée de realloc
agissant comme free
, car ce N'est pas standard C. voir les commentaires.)