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 :

[debug] memory leaks


Sujet :

MFC

  1. #1
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par d�faut [debug] memory leaks
    Bonjour � tous,

    j'ai un m�mory leak dont ne parviens pas � me d�barrasser:
    Detected memory leaks!
    Dumping objects ->
    {16050} client block at 0x013DF5E0, subtype c0, 16 bytes long.
    First-chance exception at 0x7c809eec in TestIndex_d.exe: 0xC0000005: Access violation reading location 0x0135201c.
    an invalid object at $013DF5E0, 16 bytes long
    Je n'arrive pas � le localiser car le #d'allocation (ici 16050) n'est jamais le m�me d'une ex�cution � l'autre.
    Le plus �nervant, c'est que je pense �tre parvenu � trouver le bout de code qui g�n�re cette fuite, car si j'enl�ve ce bout de code, je n'ai plus de fuite. Mais peut-�tre est-ce "l'arbre qui cache la for�t"? Car ce bout de code est simple:
    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
     
    MaMethode()
    {
    switch:
    [...]
    case 1:
          ObjetA *a;
     
          while ( (a= m_maFIFO.Get()) )
          {
                ObjetB *b= (ObjetB*) a->GetB();
                // ici, un appel de fonction qui utilise les membres de b (uniquement des int => pas de buffer, ni char*, ni pointeur de façon générale):
                f(b->membre1, b->membre2);
     
                SAFE_DELETE(a);
          }
    break;
    [...]
    }
    Si je rajoute SAFE_DELETE(b) avant SAFE_DELETE(a), �a plante.
    Je ne comprends pas trop ce qu'il se passe ici. Peut-�tre y a-t-il un rapport avec le switch?

  2. #2
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Ou un mauvais cast. Utilise dynamic_cast dans ce genre de cas.
    http://c.developpez.com/faq/cpp/?pag...s#DIVERS_casts

    ou alors le destructeur de a n'est pas virtuel
    http://c.developpez.com/faq/cpp/?pag...UCTEUR_virtuel

  3. #3
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par d�faut
    Merci pour ton aide

    Citation Envoy� par Aurelien.Regat-Barrel
    Ou un mauvais cast. Utilise dynamic_cast dans ce genre de cas.
    http://c.developpez.com/faq/cpp/?pag...s#DIVERS_casts
    En fait je me suis tromp�, toutes mes excuses: B n'est pas une classe mais une struct. Je ne peux donc pas faire de dynamic_cast.


    Citation Envoy� par Aurelien.Regat-Barrel
    En effet, le destructeur de A n'est pas virtuel. Mais le probl�me n'est pas l� car A n'est pas d�riv�e.

  4. #4
    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,
    donc dans la serie j'ai un leak lol,
    est ce que toutes les libs et programme utilisent la meme crt ?
    pas de melange multi-thread dll et multi-thread static ?

  5. #5
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par d�faut
    Et bien si, et tu mets le doigts sur un truc qui me pose pas mal de soucis, et par que pour les memory leaks. Certains projets de ma solution doivent �tre compil�s en multithread debug dll, et d'autres en multithread debug tout court.

    Quant � la crt, je pense qu'ils utisent toute la m�me, je v�rifirais lundi.

    Dans mes cauchemars, l'output de visual est grande comme un �cran de cin�ma et je vois d�filer des memory leaks � l'infini...

  6. #6
    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
    donc c'est pas la meme ,un utilise la crt sous forme de dll soit le couple msvrt(d).lib et MSVCR80.DLL (sous VC2005)
    soit en static :LIBCMT(d).lib .
    ce qui est allou� par une CRT ne peux etre lib�r� par une autre..
    regarde aussi ce lien:
    see Potential Errors Passing CRT Objects Across DLL Boundaries.

  7. #7
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par d�faut
    En effet. Ce lien explique pas mal de mes soucis, merci.
    En revanche, ce qui est �nervant, c'est que je ne peux rien y faire

    encore

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [VS 2005] Desactiver memory leak dump en DEBUG?
    Par vdaanen dans le forum Visual C++
    R�ponses: 3
    Dernier message: 29/08/2011, 17h34
  2. R�ponses: 2
    Dernier message: 08/03/2009, 11h09
  3. [debug] memory leak
    Par r0d dans le forum MFC
    R�ponses: 8
    Dernier message: 13/01/2006, 10h46
  4. [MFC] A la chasse au memory leak
    Par Yabo dans le forum MFC
    R�ponses: 17
    Dernier message: 27/06/2004, 17h35
  5. R�ponses: 7
    Dernier message: 26/02/2004, 09h32

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