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?

22
demandé sur j riv 2010-12-16 12:40:38

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.

24
répondu Simone 2010-12-16 09:43:45

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.)

9
répondu 2010-12-18 15:36:47