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 :

Problème de libération de ressource


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut Problème de libération de ressource
    Bonjour,

    Je code actuellement un programme sous Borland C++ Builder6.

    lors d'une vérification de fichier je dois faire un bilan afin de faire savoir à l'utilisateur que certain de ces fichiers ne sont pas valide.

    Or lorsque j'appelle souvent ma fenêtre de bilan je fini par avoir une exception "Ouf of ressource"
    je ne comprend pas pourquoi car je créée ma fenêtre puis la détruis après.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if ( bilan)
    {
            TForm_DeclanchementPAsGerer * p_fen1 = new  TForm_DeclanchementPAsGerer(this);
     
            isInPause = true;
            p_fen1->ShowModal();
            isInPause= false;
     
            delete p_fen1;
    }
    p_fen1 = NULL


    lorsque je n'affiche pas de bilan je n'ai pas de soucis.
    Ce "out of resource" n'est pas régulié. Autant au bout de 1 affichage j'ai le message d'erreur et autant une autre fois après 10 affichage toujours rien.

    Merci d'avance pour votre aide .

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Je vois 3 sources potentielles :
    * la création d'une instance de TForm_DeclanchementPAsGerer alloue d'autres ressources, qui ne sont pas correctement libéré. Faut voir le code de cette classe
    * es tu sur que la source du problème soit bien à cette endroit ?
    * le programme quitte ta fonction entre le new et le delete... mais tu le saurais je suppose si tu avais une exception lancée

    En tout cas, je t'encourage à utiliser les pointeurs intelligents (unique_ptr ici)

  3. #3
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut
    tout d'abord Merci d'avoir pris le temps de me répondre.

    Je viens de revérifier afin d'être sûr de chez sûr, il n'y a aucune ressource qui pourrait ne pas être libérer lors du delete de ma classe. Cette fenêtre contient uniquement du texte, un bouton OK pour fermer la fenêtre, et un TMemo ou je stock également du texte.

    En faisant du pas à pas j'ai pu observer que mon code passe bien par le delete.

    Je ne suis pas tout a fait sûr que le problème vienne de là mais j'ai constaté que lorsque je n'affichais pas de bilan je n'observais pas ce message de OutOfRessource.

    Ce problème n'étant pas répétable a un instant donnée, j'ai du mal a savoir en pas à pas quand celui ci va se produire et par la même observé a quelle moment exacte surgit le problème.

    EDIT : Je viens par hasard de tomber sur le moment exact où le problème se produit. Le message m’apparaît au moment de l'instanciation de la fenêtre.

    EDIT2 : Je viens également de tester l'implémentation avec des std::unique_ptr mais malgrès le fait que j'ai fait l'include <memory> le compilateur me dis qu'il ne connais pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TForm_DeclanchementPAsGerer * p_fen1 = new  TForm_DeclanchementPAsGerer(this);

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Je trouve ton code pour le moins étrange.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ( bilan)
    {
            TForm_DeclanchementPAsGerer * p_fen1 = new  TForm_DeclanchementPAsGerer(this);
     
            isInPause = true;
            p_fen1->ShowModal();
            isInPause= false;
     
            delete p_fen1;
    }
    p_fen1 = NULL
    Bon, passons sur le ; oublié à la fin, mais... ça compile ça ?!
    p_fen1 n'est pas sensé être connu en sorti du bloc puisque sa portée est limité à ce bloc.
    Pourquoi utiliser une allocation dynamique ?
    p_fen1 ne serait-il pas déclaré également ailleurs ? Aucun warning, aucune erreur ?
    A quoi servent les flag de pause ? Une fenêtre modal a de toutes façons la priorité jusqu'à sa fermeture. S'agit-il d'un contexte multi-thread ? Des allocations sont faîtes dans ces autres threads ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut
    il s'agit d'une erreur de recopi.

    J'ai enlevé des lignes n'ayant pas de rapport avec mes fenêtres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ( bilan)
    {
            TForm_DeclanchementPAsGerer * p_fen1 = new  TForm_DeclanchementPAsGerer(this);
     
            isInPause = true;
            p_fen1->ShowModal();
            isInPause= false;
     
            delete p_fen1;
    p_fen1 = NULL;
    }

    Voici le code propre.

    il s'agit bien d'une application multithread. les flags de pause me permette de synchroniser avec un autre thread.

    Cette fenêtre n'est utilisé/instantié que dans cette fonction.

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    @Bousk
    Bien vu...

    J'ai enlevé des lignes n'ayant pas de rapport avec mes fenêtres.
    Ca commence à faire beaucoup de chose que l'on voit pas, sans être sur que la source du problème ne vient pas de là


    Concernant unique_ptr, comme tu n'as pas un compilateur à jour, il faut utiliser boost

Discussions similaires

  1. Problème de libération des ressources
    Par willythe88 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 05/07/2011, 11h17
  2. Réponses: 4
    Dernier message: 20/04/2007, 15h19
  3. Réponses: 13
    Dernier message: 03/04/2006, 10h01
  4. Problèmes de libération de Dll en delphi7 sous windows XP
    Par Tardiff Jean-François dans le forum Langage
    Réponses: 5
    Dernier message: 10/01/2006, 15h30
  5. [Debutant(e)]problème de libération de mémoire
    Par skywalker3 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 10/02/2005, 17h38

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