Realloc

Résolu
Mastersam Messages postés 116 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 13 février 2008 - 9 sept. 2006 à 20:08
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011 - 10 sept. 2006 à 19:39
Bonjour j'ai une question qui peut paraitre bête au premier abord mais au fond c'est peut-être pas si ... évident.

voilà lors d'un realloc du type :

ptr = realloc(ptr,newsize);

si j'ai déjà quelquechose dans ptr, mais que je n'ai pas assez de mémoire pour le realloc, alors on me dit : realloc retourne un pointeur NULL. Donc je perd ce qui est déjà pointé par ptr puisque ptr=NULL. Hors la référence de realloc me dit aussi que l'objet pointé par ptr reste inchangé si la fonction échoue. du coup il semble trainer quelquepart en mémoire une zone allouée mais plus personne pour pointer dessus.

Si on fait juste realloc(ptr,newsize) je ne pense pas que ptr ai la bonne adresse si il y a eu changement de place, donc je ne vois qu'une méthode pour être sur de garder les données si ça ne peut pas être réalloué :

void *tmp
tmp=realloc(ptr,newsize);
if(tmp!=NULL)ptr=tmp;

est-ce que quelqu'un a déjà eu les mêmes doutes que moi ? Et est-ce que mes déductions sont correctes ?
Merci d'avance

Sam

 

["http://www.rc-bot.com" ]

5 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 sept. 2006 à 20:44
C'est évident que ptr = realloc(ptr,newsize); est mauvais car tu risque de perdre la valeur de ptr. Iil faut utiliser une variable temporaire, comme tu le proposes ensuite

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
Mastersam Messages postés 116 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 13 février 2008
9 sept. 2006 à 21:04
Merci, c'est bien ce que je me disais, c'est pourtant inquiétant car on trouve très souvent ptr = realloc(ptr,newsize); dans les exemples de codes. Donc j'avais un gros doute.

["http://www.rc-bot.com" ]
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 sept. 2006 à 21:39
Souvent aussi on ne vérifie pas le retour de malloc par exemple
Là c'est un peu la même chose, on suppose que ca va marcher, et on peut se permettre de le faire quand la zone de mémoire manipulée est petite

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Mastersam Messages postés 116 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 13 février 2008
10 sept. 2006 à 09:06
Oui mais même étant petite si on ne vérifier pas le retour, il se peut que l'adresse ai bougée, donc ptr ne pointera plus sur notre nouvelle zone ?

http://www.rc-bot.com/bannieres/banniere468x60.jpg
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
10 sept. 2006 à 19:39
que ce soit une allocation de 1 ou 10,000 octet(s), il faut vérifier, on ne sait jamais ce qui peut arriver

~(.:: NitRic ::.)~
0
Rejoignez-nous