Question sur realloc

Question sur realloc

by Antoine Adrien Jean Basseto -
Number of replies: 2

Bonjour,

J'ai une question sur les bonnes pratiques à appliquer lorsque l'on utilise realloc pour diminuer la taille de la mémoire utilisée par le pointeur.

Si ma compréhension est correcte, il me paraît impossible que realloc échoue (et renvoie NULL) vu que comme on diminue la mémoire utilisée il y en a forcément assez. Em plus, vu que la mémoire est diminué, il n'y a rien à memset.

Ainsi, les reflexes à avoir pour le cas général sont à oublier dans ce cas précis ? Le mieux serait d'indiquer que l'on ne fait que diminuer la mémoire utilisé avec un commentaire pour expliquer leur absence ?

Bonne journée,

Antoine Basseto

In reply to Antoine Adrien Jean Basseto

Re: Question sur realloc

by Nicolas Pierre Raulin -

Salut Antoine!

Je me souviens m'être posé la même question que toi il y a peu! Je ne retrouve pas le post stackoverflow qui m'avait donné la solution, mais je peux te l'expliquer.

En allant regarder la documentation du standard C11, on trouve (page 367 tout en bas) :

The realloc function returns a pointer to the new object (which may have the same value as a pointer to the old object), or a null pointer if the new object could not be allocated.


La partie importante est celle entre parenthèses: le pointeur aura peut-être la même valeur que l'ancien. Tout dépend de ce que realloc juge bon de faire pour la situation en particulier. Il peut très bien choisir de déplacer le pointeur de place dans la mémoire lors d'une diminution de la taille de l'objet pointé s'il pense que c'est mieux ainsi. S'il décide de déplacer le pointeur et qu'il n'y a pas de place assez grande dans la mémoire, realloc échouera et renverra NULL.

Le comportement exact de realloc n'est pas spécifié par le standard et dépend donc de son implémentation sur ton OS.


J'espère que ça a pu t'aider ^^
Nicolas


EDIT : Je ne sais pas ce que j'ai fait tout à l'heure, mais j'ai maintenant retrouvé le post stackoverflow, il te donnera aussi un exemple