Bonjour,
Tyr4 a écrit :
par quelle(s) variable(s) sont accessibles ces grandes quantités de mémoire allouée
|
Par n'importe quelle variable, car en c, on peut accéder non seulement au contenu d'une variable (x = a;), mais aussi au contenu pointé par le contenu d'une variable (x = *a;)
Il faut repérer les lignes contenant des malloc(), calloc(), ou realloc(). Il est possible que l'allocation se fasse dans des parties dont vous n'avez pas le code source, auquel cas, c'est presque impossible, à moins d'utiliser un debugger et de mettre un watch sur une zone mémoire.
De toutes manières, il n'y a pas lieu de s'inquiéter. Les applications prennent parfois beaucoup de mémoire sans qu'il y ait de fuite mémoire. S'il y a une fuite mémoire, c'est autre chose. Relisez attentivement votre code pour voir s'il n'y en aurait pas. Les causes principales de fuite mémoire en C sont :
- une absence de nul binaire à la fin d'une chaine de caractère alors qu'on utilise l'une des fonctions de manipulation de chaine de caractères,
- une dimension trop petite d'une zone, par exemple, si on n'a oublié de compter la place pour un nul en fin de chaine,
- une boucle for() qui va trop loin, un appel récursif qui ne s'arrête pas,
- une absence d'initialisation, par exemple en pensant qu'une zone est à zéro au début, alors qu'elle ne l'est pas, où qu'un pointeur sera remis à zéro après un free() alors que ce n'est pas le cas.
Pour infos, les adresses mémoires sont susceptibles de changer d'un lancement du programme à un autre. C'est normal. C'est le système d'exploitation qui voit les emplacements libres, et même qui évitent de donner toujours les mêmes emplacements pour des raisons de sécurité.
Message édité par olivthill le 02-06-2014 à 15:13:00