jc_romeo
Messages postés59Date d'inscriptionmercredi 9 juin 2004StatutMembreDernière intervention13 janvier 2006
-
13 avril 2005 à 14:39
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
13 avril 2005 à 15:09
Bonjour
Je dois manier de grandes quantité de données (plusieurs giga) et pour cela je les charge de manière séquencielle (et donc je dois libérer la mémoire entre chaque passage)
J'ai lu que la fonction free permettait de libérer la mémoire, mais si je fais la manipulation suivante:
t est un tableau remplit
free(t);
printf(t[10000]);
alors il me redonne la bonne valeur
Cela veut donc dire que la mémoire n'a pas été effacée.
Je voudrais savoir comment est ce que l'on peut définitivement effacer un tableau de manière à libérer totalement la mémoire (c'est cela le plus important)
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 13 avril 2005 à 15:09
1 -Cela n'est pas forcément surprenant de retrouver la valeur. La mémoire est désallouer (ie une autre partie du prog peut allouer cette zone) mais en attendant le contenu n'est pas effacé (du moins en version release car en Debug normalement elle est resetée à 0xCC ou 0xCD ou 0XDD pour détecter + facilement). De plus si la zone fait partie d'un plus grand bloc dont une partie est toujours allouée tu n'aura pas forcément de violation d'accès de la part de windows.
2 - NON il ne faut pas faire free(f) avant close(f) car c'est close qui se charge de libérer la mémoire des pointeurs de fichier.