Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 février 2008
-
9 sept. 2006 à 20:08
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 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é :
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201013 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
Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 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.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201013 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