2009-09-19 6 views
0

Comment se comporte le relloc lorsqu'il doit redimensionner la mémoire allouée à une taille plus grande et que cela doit se faire dans une zone de mémoire distincte car la quantité de mémoire demandée peut être redimensionnée inplace. Est-ce que la mémoire d'origine est désallouée automatiquement par relloc (je pense que oui) ou il doit être fait par le programmeur (peu probable)?Comportement relloc lors du redimensionnement

Répondre

5

Oui, realloc gère automatiquement la libération de la mémoire d'origine. Si le bloc de mémoire peut être redimensionné en place, alors realloc le fera. Sinon, il va allouer un nouveau bloc de mémoire assez grand, copier les données de l'ancien bloc vers le nouveau, et libérer le vieux bloc. Vous n'avez pas à vous soucier de le libérer vous-même.

Si realloc échoue (par exemple vous avez demandé trop de mémoire, et il ne peut pas allouer beaucoup), la mémoire d'origine est pas libéré. Si vous ne faites pas attention, vous pouvez perdre de la mémoire - si realloc renvoie NULL en raison d'une défaillance et que vous ne conservez pas de pointeur sur le bloc de mémoire d'origine, cette mémoire restera allouée et fuira.

Questions connexes