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

MFC Discussion :

fuite de memoire


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut fuite de memoire
    Salut !

    Alors voilà , j'ai remarque une " fuite de mémoire" dans mon programme (l'utilisation de mémoire monte petit à petit) et pour finallement faire un beau crash au bout de quelques minutes .


    Voici à quoi ressemble simplement mon code :


    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
    23
    24
    25
    26
     
    void CProjetView::OnInitialUpdate() 
    {
    	CView::OnInitialUpdate();
     
    	// TODO: Add your specialized code here and/or call the base class
    	SetTimer(1,10,NULL);
    }
     
     
     
    void CProjetView::OnTimer(UINT nIDEvent) 
    {
    	// TODO: Add your message handler code here and/or call default
    	CProjetDoc* pDoc = GetDocument();
    	pDoc->UpdateAllViews(NULL);
     
    	CView::OnTimer(nIDEvent);
    }
     
     
    void CProjetView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
    {
    	// TODO: Add your specialized code here and/or call the base class
    	CDC * pDC = GetDC();
    }



    Voilà , rien que ces bout de code entraine une "fuite de mémoire" .. puis un plantage . J'ai bien tenté de mettre un pDC=NULL; et pDoc=NULL; dans le OnTimer, mais rien y fait .

    Une petit aide serait la bienvenue ! Merci de vos réponses

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    À chaque GetDC() doit en théorie correspondre un ReleaseDC().

    Généralement, pour éviter ce genre de problèmes, on utilise des classes RAII, comme CClientDC ou CPaintDC...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    est ce que tu te rends compte de ce que tu as ecris ?
    toutes les 10ms tu demandes au document de raffraichir les vues ....
    c'est un peut trop rapide pour le framework ....
    je ne sais pas ce que tu veux faire exactement mais ce n'est pas la bonne méthode ....
    [edit]
    je n'ai pas vu la remarque de medinoc ,mais exact...
    de toute façon en procedant de la sorte ton ecran va clignoter...
    [/edit]

  4. #4
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut
    à Medinoc : Merci , ça marche nikel maintenant !

    à farscape : C'etait juste pour "centrer" mon probleme . Le Timer est normalement initialisé à 100ms et bien d'autre fonction sont appellé (mais elles n'entrainaient pas la fuite) .

    au fait il existe un moyen pour eviter le clignotement

    Merci de votre réponse !

  5. #5
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    oui, en utilisant un double buffer (on affiche une image pendant qu'on créé la suivante et ensuite on switche)
    voilà l'explication :
    http://www.codeproject.com/gdi/flickerfree.asp

    c'est ultra simple à mettre en oeuvre, et ça marche nickel

    Philippe

Discussions similaires

  1. [JVM]Fuite de mémoire
    Par anykeyh dans le forum Général Java
    Réponses: 6
    Dernier message: 28/09/2009, 22h43
  2. [memoire]Fuite de memoire?
    Par clovis dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/01/2006, 22h04
  3. Outils pour rechercher des fuites de memoires dans un prog
    Par elekis dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 29/04/2005, 21h06
  4. fuite de memoire dans une liste de pointeur sur composant
    Par Nicolos_A dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/12/2004, 08h46
  5. correction de fuite de memoire
    Par vince3320 dans le forum C
    Réponses: 38
    Dernier message: 28/06/2004, 11h27

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