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 :

[MFC] Libération de mémoire allouée.


Sujet :

MFC

  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Par défaut [MFC] Libération de mémoire allouée.
    Salut,

    Quand je teste mon appli ( construite dans sa version finale ), j'ai des soucis au niveau allocation/libération de mémoire.

    Quand elle plante ( Je suis en Release/static Library ) et que je fais annuler pour déboguer ( J'ai fais générer debug info dans les settings du projet ),
    le débogueur m'indique que l'erreur a lieu dans le contexte suivant:
    " MONAPPLI.EXE! __sbh_free_block " avec les lignes assembleur qui vont bien.....

    J'ai recherché à quoi correspondait ce __sbh_free_block dans la MSDN mais j'ai rien trouvé.

    Quelqu'un-a-t-il déjà eu ce problème ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Et ca plante pas en debug? en faisant les memes actions?

  3. #3
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Par défaut
    ouaip!

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Je suis pas sur mais il me semble que tu peux linker la release avec les sources(faire une sorte de semi-release) a partir des settings, ca pourra peut-etre deja t'aider, histoire d'avoir la call-stack si ca plante.

    Et sinon ben si ca le fait toujours au meme moment/endroit, ben faut essayer de trouver la fenetre/dialog/classe sur laquelle ca plante, mais bon la je t'apprend rien...

    Aussi il me semble que le compilo initialise les variables en mode debug mais pas en release, du coup petre que t'essaye de liberer du nimp.

  5. #5
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    salut

    la fonction "__sbh_free_block" est une fonction de la librairie CRT qui est appellée par free() ou delete.

    a mon avis, tu essayes de libérer un bloc déjà libéré (par free() ou delete) ou pire, tu as corrompu le heap en faisait un dépassement de buffer par ex (buffer overrun) -> tu écris là ou il faut pas

    reverifies tout tes appels à malloc / new et free / delete.

    @+

  6. #6
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Par défaut
    Salut,

    J'ai peur que ce soit la deuxième solution ( juste avant d'avoir les fenêtres de débogage ), j'ai le message "Access Violation", et encore avant, le message "l'instruction à l'adresse 0xXXXXXXX tente d'écrire à l'adresse 0xZZZZZ;la mémoire ne peut pas être Written".

    Comment le heap peut-être corrompu ?
    Normalement, l'allocation est bien globale,pas locale, non ?
    Je fais juste des new / delete , pas des malloc/free et dans mon fichier *.cpp, je n'inclus comme entête que le <afxwin.h>, pas même le moindre petit <iostream/iostream.h>.

    Si c'est vraiment le heap qui est corrompu, comment je puis éviter çà ?

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Un débordement de buffer est une des principales sources de corruption du tas.
    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.

  8. #8
    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,
    le fait d'utiliser new et delete n'empêche pas le fait que tu puisses faire des débordements mémoire...
    pour les recommandations voir ce post:
    http://www.developpez.net/forums/sho...32#post2764032
    le post ci-dessous de la faq donne aussi quelques informations sur l'initialisation des pointeurs.
    suivant ce que tu obtiens ça donne une piste sur le problème.
    http://cpp.developpez.com/faq/vc/ind...gPointeurValue

  9. #9
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Par défaut
    Salut,

    Au début du post, je disais que ça plantait dans mon programme et que le contexte était MONAPP.EXE __sbh_free_block. ( Static Library )
    Ca plante aussi parfois dans le context suivant : NTDLL.DLL. ( Shared DLL )

    La je pense pas que ça vienne de mes allocation/libération.
    Est-ce que ça peut venir d'une mauvaise gestion des CView et CDialog ?
    ( style: pas assez de fonction par défaut redéfinies etc . )

    A+.

  10. #10
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Par défaut
    Salut,

    Est-ce qu'il y a moyen de corriger ces problèmes avec un service Pack ?
    Si oui lequel?
    Et si c'est le quatrième, est-ce qu'il faut avoir installé le premier,le deuxième et le troisième avant ?

    Merci d'avance.

Discussions similaires

  1. XamlReader->Load et libération de mémoire allouée
    Par tazer dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 18/12/2012, 13h01
  2. libération de toute la mémoire allouée
    Par salseropom dans le forum C
    Réponses: 17
    Dernier message: 05/11/2007, 16h36
  3. [MFC][VC++6]Libération de mémoire
    Par ben_popcorn dans le forum MFC
    Réponses: 22
    Dernier message: 18/08/2006, 16h08
  4. Réponses: 25
    Dernier message: 16/07/2003, 20h41

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