Gestion de la mémoire

Résolu
jc_romeo Messages postés 59 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 13 janvier 2006 - 13 avril 2005 à 14:39
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Derniè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)

Merci d'avance
JC

2 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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.
3
jc_romeo Messages postés 59 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 13 janvier 2006
13 avril 2005 à 14:41
En particulier pour les pointeurs de fichier
est ce que cela vaut le coup de faire un free(f) avant fclose(f)?

Merci d'avance
JC
0
Rejoignez-nous