Malloc en c et utilisation memoire sous win

cs_stephanieL Messages postés 12 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 31 mai 2005 - 28 juil. 2004 à 12:09
 cs_hsmrpro - 1 avril 2007 à 18:50
mon appli en c a une utilisation memoire (dans le gestionnaire de tache) qui augmente tout le temps. Mon appli est essentiellement une boucle sur une fonction principale. En effectuant un debug ligne par ligne dans cette fonction principale, je vois que l'augmentation se situe au niveau d'un malloc alors que je fais un free plus tard qui ne fait pas diminuer l'utilisation memoire. Help!!!!

21 réponses

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2004 à 12:19
Tu es sur que tu free l'allocation memoire ?
tu sais il existe des methode pour savoir ce qu'il n'a pas ete aloue, prend l'une de met librairie util.c et util.h, et cela enrgistre dasn quel fichier et a quelle ligne les allocation ont ete faite, et des que tu quitte le programme, il te dis tout les allocaiton non liberees.

Comme cela tu pourra voir lesquelle ne le sont pas, et corriger ton bug. Est-tu sur que tu fasses autant de malloc que de free ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 juil. 2004 à 12:21
Faut cesser de regarder des stats qui induisent en erreur, c'est au systeme de gerer la memoire par prog, quand une autre en aura besoin il viendra la prendre.
Asssure toi de bien liberer au plus tot ce que tu alloues et tout va bon.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_stephanieL Messages postés 12 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 31 mai 2005
28 juil. 2004 à 12:24
Le problème c'est que l'utilisation mem augmente constamment et du coup, au bout d'un moment, j'ai un message de win qui me dit que je n'ai plus assez de mem virtuelle
0
cs_stephanieL Messages postés 12 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 31 mai 2005
28 juil. 2004 à 12:28
JCDjcd
tu peux m'en dire un peu plus sur ce que je dois utiliser?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 juil. 2004 à 12:33
ah oui la le prob est serieux, si tu ne donnes pas une extrait de ton code sera difficile de deviner.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_stephanieL Messages postés 12 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 31 mai 2005
28 juil. 2004 à 12:37
je peux pas parce que c'est assez énorme, je remarque juste que quand je fais des malloc, l'utilisation memoire augmente de temps en temps (on m'a dit que c parce que l'alloc se fait par tranche) et que quand je fais un free pour cette meme alloc, l'utilisation mem ne diminue pas. J'ai juste testé un truc tout bete (un malloc suivi d'un free) pour voir ce que ca faisait (sous vc++6) et meme ca, ca ne fait pas forcément diminuer l'utilisation mem.
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2004 à 12:57
J'ai surcharge le malloc et le free. Maintenant il faut faire Malloc(...) et Free(...) (avec des majuscules).

Il suffit d'initialise la librairie dans le main, et le la fermer a la fin de ton programme, et tout les malloc non-desalloue seront liste dans le fichier error.txt

Pour avoir les deux fichiers util.h et util.c prend ma derniere source (methode d'Euler encore dans l'histoirique, datant d'aoujourd'hui), tu prend les fichiers codeCutil.txt et codeHutil.txt que tu renomme en .c et .h
tu inclues le .h dans ton projet, et n'oublie pas d'initialiser, c tres important, tu aura un exemple toujours dans la meme souce dans codeCmain.txt

Pour avoir la liste des allocations il faut que tu fermes la libraire a la fin de ton programme, si tu n'arrives pas finir le programme car il y a des bug par exemple, ou par ce que tu as iun boucle infini, dis le moi, je changerai mon source pour que l'on puisse avoir la liste en direct.

bonne chance JCDjcd
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
28 juil. 2004 à 13:03
sous VC++, il y a plus simple pour détecter les memory leak, NitRic avait déposé une source tres simple permettant de le verifier, jte conseille d'aller la voir, ca m'a servi, il faut ke tu debugges ton prog et puis kan tu le kitera, tu verras kel allocations n'ont pas été libérés..
Si tu trouves pas, je crois l'avoir laissé ds ma derniere source.

++
0
cs_stephanieL Messages postés 12 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 31 mai 2005
28 juil. 2004 à 14:03
Mon prog fait appel à des librairies statiques ou se font les alloc de mem. Est ce que vos libriairies fonctionnent si je les alloue que dans le main ou est-ce que je dois les inclure dans tous les fichiers ou il y a une allocation mem??
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2004 à 14:37
ben helas oui, mais c'est le langage C/C++ qui est comment cela, tu es bien obliger d'incluer stdlib.h pour malloc, alors il suffit de le remplacer par le nouvelle libraire que tu as choisies (pour moi c'est #include "util.h")
0
cs_stephanieL Messages postés 12 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 31 mai 2005
28 juil. 2004 à 14:48
JCDjcd, j'ai eu un access violation au niveau de la ligne entre !!!!

void RemoveUtilHeader(P_UTIL_HEADER first,P_UTIL_HEADER pRemoved)
{
// on verifie que l'on ne supprime pas la sentinelle
if(pRemoved == first)
{
Error(("Deletion de la sentinelle"));
}
//Assert(pRemoved != first);
// sinon on enleve l'entete de la liste
// l'operation est simple, grace a l'existence
// de la sentinelle (aucun teste a faire)

!!!!pRemoved->prev->next = pRemoved->next;!!!

pRemoved->next->prev = pRemoved->prev;
} // RemoveUtilHeader()
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2004 à 15:38
au debut de ton programme, tu as mis :
InitializationLibUtil();

et a la fin :
CloseLibUtil();

??
0
3psilon Messages postés 76 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 17 janvier 2005
29 juil. 2004 à 00:44
Meme si le sujet est malloc et free, personne n'as parlé de CloseHandle()

Cela pourrais ptet venir de la ?
0
3psilon Messages postés 76 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 17 janvier 2005
29 juil. 2004 à 00:47
oups j'avais mal lu le permier post dsl
0
cs_stephanieL Messages postés 12 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 31 mai 2005
29 juil. 2004 à 09:10
JCDjcd oui, j'avais bien mis tout ca dans le main, et remplacé les malloc et free par tes fonctions.

Sinon, si quelqu'un a une autre idée d'ou ca peut venir, je suis preneuse, peut être que ca peut venir de fonctions déclarées statiques?? Au secours!!!!! je suis perdue!!!!
0
cs_stephanieL Messages postés 12 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 31 mai 2005
29 juil. 2004 à 11:09
JCDjcd
Merci! j'ai refait toutes les inclusions et cette fois ci, pas de problèmes! je suis en train de corriger tous les pb d'allocation, merci, c'est génial ton truc!
0
cs_stephanieL Messages postés 12 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 31 mai 2005
29 juil. 2004 à 18:01
jcdjcd
tu aurais pas la même chose avec des calloc en plus??
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
29 juil. 2004 à 18:24
ho la difference en malloc et calloc c'est juste que le calloc c'est un malloc qui initialise la memoire a zero, donc bon tu n'as qu'a rajouter ou tu veux (dans la fonction Malloc, ou apres que tu es appelle Malloc) : memset(p,0,size) avec p le pointeur sur l'allocation memoire
0
cs_stephanieL Messages postés 12 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 31 mai 2005
30 juil. 2004 à 14:24
merci
Par contre, une petite question : est ce que ton prog detecete si on fait 2 malloc sur un meme pointeur?
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
30 juil. 2004 à 15:19
ben desole mais je ne peux pas le savoir, en revanche il est possible d'avoir 2 pointeurs sur un meme malloc, et si tu fais Free pour lun, alors je ne le fias pas car il y a une second qui pointe dessus. Mais je ne peux pas dectester p1=p2=p3=Malloc(TOTO,7);
0
Rejoignez-nous