IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Fuite de mémoire


Sujet :

C

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 69
    Points : 78
    Points
    78
    Par défaut Fuite de mémoire
    Bonjour,

    Je suis confronté actuellement à un petit soucis....

    J'utilise process hacker afin de stabiliser la mémoire de mon logiciel...(au lancement mon prog cpp consomme 34 Mo) puis augmente de 0.01 Mo par seconde ....
    Le programme fait régulièrement une conversion de pointeur float en pointeur long à l'aide d'un long(pointeur float)

    Un appel à cette conversion, je pense, consomme de la mémoire....Comment faire pour réduire voire éliminer cette augmentation de la mémoire.....

    merki

  2. #2
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Salut,
    Un appel à cette conversion, je pense, consomme de la mémoire....Comment faire pour réduire voire éliminer cette augmentation de la mémoire.....
    Un pointeur est une valeur codée sur 32 bits quel que soit la donnée sur laquelle il pointe => la conversion d'un pointeur n'augmente donc pas ma taille de celui-ci ; seule sa signification et la valeur pouvant y être stockée changent.

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 69
    Points : 78
    Points
    78
    Par défaut Etrange
    C'est vraiment étrange car quand j'enlève ces conversions....La mémoire utilisée augmente toujours mais dans une moindre mesure.....

    Et là honnêtement je sèche....

  4. #4
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    faudrait peut être que tu nous en dise un peu plus sur ce que fait ton programme !

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 69
    Points : 78
    Points
    78
    Par défaut Voici le détail
    Je tente d'afficher du texte à l'aide de direct3d

    voici la fonction d'affichage du texte, qui s'affiche en boucle.....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    void Draw_Head_Menu(void){
    	if(Head_Menu_Display==TRUE){
    	Head_Menu_Select=TOOL_Fading(Head_Menu_Select,Head_Menu_Selected,10);
    	for(i=0;i<Head_Menu_Max;i++){
    		if((long)Head_Menu_Selected==i)Head_Menu[i].Color.blend_goal=255;
    		else Head_Menu[i].Color.blend_goal=100;
    		Head_Menu[i].Color.blend=TOOL_Fading(Head_Menu[i].Color.blend,Head_Menu[i].Color.blend_goal,20);
    		Head_Menu[i].Pos.axis_x=Head_Menu[i-1].Pos.axis_x+strlen(Head_Menu[i-1].Title)*65;
    		g_pFont2->DrawText((-Head_Menu_Select+i)*500, 0, D3DCOLOR_ARGB((long)Head_Menu[i].Color.blend,0xFF,0xFF,0xFF), TOOL_Convert_to_LPC(Head_Menu[i].Title) );
     
    	}
    	for(i=0;i<20;i++){
    		List_Menu[i].Pos.x=TOOL_Fading(List_Menu[i].Pos.x,List_Menu[i].Pos.x_goal,10);
    		g_pFont3->DrawText(List_Menu[i].Pos.x, 100+i*110, D3DCOLOR_ARGB((long)Head_Menu[(long)Head_Menu_Selected].Color.blend,0xFF,0xFF,0xFF), TOOL_Convert_to_LPC(List_Menu[i].Title) );
    		g_pFont4->DrawText(List_Menu[i].Pos.x, (147)+i*110, D3DCOLOR_ARGB((long)Head_Menu[(long)Head_Menu_Selected].Color.blend,0xFF,0xFF,0xFF), TOOL_Convert_to_LPC(List_Menu[i].Main) );
    		g_pFont5->DrawText(List_Menu[i].Pos.x, 180+i*110, D3DCOLOR_ARGB((long)Head_Menu[(long)Head_Menu_Selected].Color.blend,0xFF,0xFF,0xFF), TOOL_Convert_to_LPC(List_Menu[i].Sub) );
     
    	}
     
    }
    }

    le pointeur : Head_Menu[i].Color.blend est un float et pour qu'il puisse est pris en compte par D3DCOLOR_ARGB, il doit être converti en long.... et je pense fortement que ce genre de conversions (répétées jusqu'à plus soif) consomment énormément de mémoire....

    De plus la fonction :TOOL_Fading se compose de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    float TOOL_Fading(float Dest, float Source,float Step){
     
    if(Source>Dest)Dest+=(Source-Dest)/Step;
     
    if(Source<Dest)Dest-=(Dest-Source)/Step;
     
    return Dest;
    }

    Donc résultat des courses après 5 heures d'utilisation : la mémoire utilisée (via process hacker) est passée de 34 Mo à 1,18 Go....

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    ajoute les balises CODE et /CODE, c'est illisible

  7. #7
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 69
    Points : 78
    Points
    78
    Par défaut Désolé
    Désolé j'avais oublié....J'ai fait le ménage...

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Tu as une fuite de mémoire car tu alloues de la mémoire sans la libérer à la fin.

    Tu affiche du texte (création d'une surface contenant ton texte), mais je pense qu'il faut ensuite libérer la surface de ce texte.

  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 69
    Points : 78
    Points
    78
    Par défaut J'ai trouvé
    J'ai finalement réussi à trouver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TOOL_Convert_to_LPC(Head_Menu[i].Title)
    une fonction qui convertissait un char en LPCWSTR

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    LPCWSTR TOOL_Convert_to_LPC(char *ctl){
        if(ctl[0]!=NULL){
    unsigned long Size = MultiByteToWideChar (CP_ACP, 0, ctl, -1, NULL, 0) ;
    //Ensuite vous faites un:
     LPWSTR wUnicode = new WCHAR[Size]; 
    //puis vous effectuez la conversion
    MultiByteToWideChar (CP_ACP, 0,  ctl, -1, wUnicode, Size) ;
    return wUnicode;
        }
        }
    et depuis plus de perte de mémoire!!!

    Merci beaucoup pour les réponses!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fuite de mémoire ?
    Par salseropom dans le forum C
    Réponses: 2
    Dernier message: 12/01/2006, 16h19
  2. Réponses: 1
    Dernier message: 02/12/2005, 14h18
  3. fuite de mémoire
    Par mamag dans le forum MFC
    Réponses: 17
    Dernier message: 19/08/2005, 10h42
  4. Fuite de mémoire en utilisant le template list
    Par schtroumpf_farceur dans le forum Langage
    Réponses: 9
    Dernier message: 18/07/2005, 20h44
  5. Réponses: 8
    Dernier message: 17/10/2002, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo