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++Builder Discussion :

Plantage d'un programme - cafree


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut Plantage d'un programme - cafree
    Bonjour,

    Je développe une petite application en parallèle d'une base MySQL.
    Lorsque je ferme une form de mon appli, cela appele un évenement "FormClose" de builder.

    Dans cet évênement, j'ai modifier le code pour que l'espace mémoire pris par la form soit libéré.

    voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TFormAjoutFamille::FormClose(TObject *Sender,
          TCloseAction &Action)
    {
           Action = caFree;        
    }
    Seulement voila, au moment ou la Form est quittée, l'appli plante et créée donc une exception. En supprimant l'évenement "FormClose", je ne trouve plus ce pb.

    J'aimerai tout de même vider la mémoire à chaque fermeture de mes forms, donc si vous avez une solution à mon pb, je suis prenneur. ^^

    Merci par avance,

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    A mon avis c'est que tu le fait dans la Form principale, alors que ça ne doit pas être fait car lors de la fermeture de cette form, c'est toute l'appli qui se ferme, et il doit donc encore y avoir des accès pour fermer proprement l'appli, donc, caFree oui sauf sur le fenêtre principale

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Bah pourtant mon cafree est fait sur une Form qui n'est pas la principale...

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Alors c'est que t'es fenêtres doivent être construite au démarrage de l'appli, et c'est ton appli qui gère tes fenêtres, il faut donc que tu retire toutes tes fenêtres excepté la principale des fenêtres créé automatiquement dans tes options de projet (onglets Fiche)

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    c'était ce que j'avais fait déja...

    Je vois pas vraiment d'ou ca peut venir..

    Je viens de refaire un essai. Et lorsque je quitte la form désirée. Rien ne plante, par contre, le fait de la ré afficher à partir de ma form principale, fait planter l'appli.

    Donc c'est à la ré ouverture que ce situe le nouveau pb..

  6. #6
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Bizard comme problème, je vois pas trop d'où ça peut venir, essaye de voir ta pile d'appel lorsque ça crache

  7. #7
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Citation Envoyé par Freud44 Voir le message
    Donc c'est à la ré ouverture que ce situe le nouveau pb..
    Libérer la mémoire de la fenêtre signifie que la fenêtre n'existe plus, ça équivaut à delete, il est donc logique que vous ne puissiez pas rouvrir la fenêtre. Mais ai-je bien compris ?

    Cette méthode a été inventée car le suicide est interdit en POO, une fenêtre ne peut pas faire un delete sur elle-même ni un objet sur lui-même. C++ Builder résout cette question en se chargeant de libérer la mémoire (d’où la notion de Owner, c’est le propriétaire qui se charge de cette libération) et, pour le cas particulier d’une fenêtre, avec ce code caFree.

    Le reste est à la charge du programmeur qui doit faire coïncider ses new avec ses delete.

    À bientôt
    Gilles

Discussions similaires

  1. [WD20] Plantage de mon programme suite migration vers Windev20
    Par remi82 dans le forum WinDev
    Réponses: 5
    Dernier message: 20/01/2015, 15h57
  2. Plantage d'un programme impression de masse
    Par Soyanlo dans le forum VB.NET
    Réponses: 5
    Dernier message: 08/02/2012, 14h20
  3. plantage application (code programme ?)
    Par STEF68600 dans le forum VB.NET
    Réponses: 16
    Dernier message: 15/06/2010, 17h34
  4. [Turbo Pascal] Algorithme de simplex : plantage de mon programme et de TP7
    Par benooo dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 01/05/2009, 23h49
  5. Réponses: 2
    Dernier message: 06/03/2007, 11h07

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