Realloc [Résolu]

Signaler
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008
-
NitRic
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008

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" ]
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008

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
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

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