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 :

Exception a la fermeture d'une application avec c++ builder


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Exception a la fermeture d'une application avec c++ builder
    bonjour a tous
    c'est encore moi avec mes problèmes en c++ builder :-)
    voila, j'ai une exeption a la fermeture de mon application, je me rappel que quand je travaillais avec delphi je reglé ça en mettant un code qui commence avec 'try' dans le OnCreat de la fiche principale, mais je ne sais pas koi faire!
    avez vous une idée

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Naturellement vous pouvez faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
       // la fermeture
    }
    catch(...)  
    {
      MessageBox("Plantage lors de la fermeture");
    }
    Les points de suspension comme paramètre de catch font partie de la syntaxe. Il y d'autre possibilité, mais catch() est interdit.
    Mais je vous dirai que s'il y a une erreur il FAUT la trouver.
    Il y 2 solutions, soit vous activez le pas à pas au début de la zone douteuse, soit vous activez Projet/Options/CodeGuard.

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Exception avec c++ builder
    bonjour
    merci bcp, j'ai mis Close() dans le bloc try, mais je ne sais toujour pas koi mettre dans catch, c'est vous avez un exepmle il me sera d'une grande aide, je vous joint l'exception qu'il me fait.
    merci
    Images attachées Images attachées  

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    voila ce que j'ai fais mais ça marche pas, ya un truc qui m'échappe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try
    {
       Close();
    }
    catch(EAccessViolation &exception_variable)
    {
       MessageDlg("Plantage lors de la fermeture", mtInformation, TMsgDlgButtons() << mbOK, 0);
     
    }

  5. #5
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Citation Envoyé par lydafree Voir le message
    voila ce que j'ai fais mais ça marche pas, ya un truc qui m'échappe.
    Qu'est ce qui ne marche pas?

    Il faut savoir que le debugger de C++ Builder montre même les exceptions interceptés par un bloc try...catch dans ton programme.
    Verifie le en lancant l'application en dehors de c++ builder (directement depuis windows).

    Mais comme le soulignait Pierre Dolez, interceptée l'exception à la fermeture du programme n'est pas une bonne solution. Il vaut mieux rechercher la source du problème et le résoudre.
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Ce genre d'erreur vient généralement d'une opération quelconque sur un pointeur invalide.
    Un pointeur est invalide si il n'a pas été initialisé, directement ou indirectement.
    Pour le paramètre du catch, je préfère garder les points de suspension, cad à dire ne pas préciser le type d'exception.
    Vous pouvez toujours m'envoyer votre projet, je suis Débutat(e), mais expert en debug

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Exception a la fermeture d'application en c++ builder
    bonsoir
    merci a tous les deux, en fait j'ai utilisée l'éxecution pas a pas et il se bloque a cette instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inline void  __stl_delete(void* __p) { ::operator delete(__p); }
    j'ai compred pas grand chose, mais je suppose que c'est lié aux vector et a l'allocation memoire, c'est en fait la 1ere fois que je les utilise et en plus c'est ma 1ere application en c++, et le pire c'est que c'est un grand projet déjas j'arrive pas, a ce stade, a tous controler.
    ce que je voulais en fait, par ma question, c'est une astuce pour contourner cette excption: puisque elle n'influence pas vraiment mon projet, je l'ai juste a la sortie (Close()), donc plus précisaiment je veux une façons pour forcer a quitter, au lieu de faire a chaque fermeture Ctrl+f2...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Il faudrait savoir ce qui appelle cette instruction. Si c'est Close(), il faut chercher autrement.
    C'est une instruction de la librairie stl, peu utilisée par Borland Builder.
    Cette instruction veut détruire un pointeur qui est incorrect.
    Question : utilisez-vous seulement les librairies de Builder ou utilisez-vous aussi des containers comme std::vector ? Quel est le non du fichier qui contient cette instruction ?

    Si vous utilisez std::vector dans un nombre limité de modules, alors la recherche sera limitée.

    Mais de toute façon, si vous travaillez avec Builder, rester de préférence avec la vcl et si vous avez besoin de listes, utisez TList et ses copines de la bibliothèque CLX.

    Vous trouverez, quitte à faire quelques modifications.
    Mais n'oubliez pas qu'en informatique, IL FAUT COMPRENDRE.
    Bon courage.

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Exception avec c++ builder
    bonsoir
    Question : utilisez-vous seulement les librairies de Builder ou utilisez-vous aussi des containers comme std::vector ? Quel est le non du fichier qui contient cette instruction ?
    oui, justement j'utilise std::vector.
    le nom du fichier c'est new, voici tout le fichier:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    /*
     * Copyright (c) 1999 
     * Boris Fomitchev
     *
     * This material is provided "as is", with absolutely no warranty expressed
     * or implied. Any use is at your own risk.
     *
     * Permission to use or copy this software for any purpose is hereby granted 
     * without fee, provided the above notices are retained on all copies.
     * Permission to modify the code and to distribute modified code is granted,
     * provided the above notices are retained, and a notice that the code was
     * modified is included with the above copyright notice.
     *
     */
    
    #ifndef _STLP_NEW_HEADER
    # define _STLP_NEW_HEADER
    
    # ifndef _STLP_OUTERMOST_HEADER_ID
    #  define _STLP_OUTERMOST_HEADER_ID 0x447
    #  include <stl/_prolog.h>
    # endif
    
    // # include <stl/_new.h>
    
    #ifdef _STLP_WINCE
    
    inline void* _STLP_CALL __stl_new(size_t __n) {
      return ::malloc(__n);
    }
    
    inline void _STLP_CALL __stl_delete(void* __p) {
      free(__p);
    }
    
    #else
    
    #ifndef _STLP_CSTDDEF
    // size_t
    # include <cstddef>
    #endif
    
    #if defined (__BORLANDC__) && (__BORLANDC__ > 0x520)
    // new.h uses ::malloc ;(
    # include <cstdlib>
    using _STLP_VENDOR_CSTD::malloc;
    #endif
    
    # if !defined (_STLP_NO_NEW_NEW_HEADER)
    #   include _STLP_NATIVE_CPP_RUNTIME_HEADER(new)
    #  else
    #   include  <new.h>
    # endif
    
    # ifndef _STLP_NO_BAD_ALLOC
    #  ifdef _STLP_USE_OWN_NAMESPACE
        _STLP_BEGIN_NAMESPACE
        using _STLP_VENDOR_EXCEPT_STD::bad_alloc;
        using _STLP_VENDOR_EXCEPT_STD::nothrow_t;
        using _STLP_VENDOR_EXCEPT_STD::nothrow;
    
    #  if defined (_STLP_GLOBAL_NEW_HANDLER)
        using ::new_handler;
        using ::set_new_handler;
    #  else
        using _STLP_VENDOR_EXCEPT_STD::new_handler;
        using _STLP_VENDOR_EXCEPT_STD::set_new_handler;
    #  endif
        
        _STLP_END_NAMESPACE
    
    #  endif /* _STLP_OWN_NAMESPACE */
    
    # else /* _STLP_NO_BAD_ALLOC */
    
    #  include <exception>
    
    _STLP_BEGIN_NAMESPACE
    
    class nothrow_t {};
    
    # ifdef _STLP_OWN_IOSTREAMS
    extern _STLP_DECLSPEC const nothrow_t nothrow;
    # else
    #  define nothrow nothrow_t()
    # endif
    
    class bad_alloc : public _STLP_EXCEPTION_BASE { 
    public:
      bad_alloc () _STLP_NOTHROW_INHERENTLY { }
      bad_alloc(const bad_alloc&) _STLP_NOTHROW_INHERENTLY { }
      bad_alloc& operator=(const bad_alloc&) _STLP_NOTHROW_INHERENTLY {return *this;}
      ~bad_alloc () _STLP_NOTHROW_INHERENTLY { }
      const char* what() const _STLP_NOTHROW_INHERENTLY { return "bad alloc"; }
    };
    
    _STLP_END_NAMESPACE
    
    #endif /* _STLP_NO_BAD_ALLOC */
    
    # if defined (_STLP_NO_NEW_NEW_HEADER) || defined (_STLP_NO_BAD_ALLOC) && ! defined (_STLP_CHECK_NULL_ALLOC)
    #  define _STLP_CHECK_NULL_ALLOC(__x) void* __y = __x; if (__y == 0) _STLP_THROW(bad_alloc()); return __y
    # else
    #  define _STLP_CHECK_NULL_ALLOC(__x) return __x
    # endif
    
    _STLP_BEGIN_NAMESPACE
    #if (( defined(__IBMCPP__)|| defined(__OS400__) || defined (__xlC__) || defined (qTidyHeap)) && defined(__DEBUG_ALLOC__) )
    inline void*  _STLP_CALL __stl_new(size_t __n) {  _STLP_CHECK_NULL_ALLOC(::operator _STLP_NEW(__n, __FILE__, __LINE__)); }
    inline void _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p, __FILE__, __LINE__); }
    #else
    # ifndef __BORLANDC__
    inline void*  _STLP_CALL __stl_new(size_t __n)   { _STLP_CHECK_NULL_ALLOC(::operator _STLP_NEW(__n)); }
    inline void   _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p); }
    # else
    inline void* __stl_new(size_t __n)   { _STLP_CHECK_NULL_ALLOC(::operator _STLP_NEW(__n)); }
    
    inline void  __stl_delete(void* __p) { ::operator delete(__p); }
    # endif
    #endif
    _STLP_END_NAMESPACE
    
    #endif /* WINCE */
    
    # if (_STLP_OUTERMOST_HEADER_ID == 0x447)
    #  include <stl/_epilog.h>
    #  undef _STLP_OUTERMOST_HEADER_ID
    # endif
    
    #endif /* _STLP_NEW */
    
    // Local Variables:
    // mode:C++
    // End:
    il m'indique la ligne en rouge, qd il me fait l'exception.
    désolée, je vous envois tout ça parceque j'ai pas su résoudre, j'espere que l'un de vous a une idée.

  10. #10
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 931
    Points : 1 913
    Points
    1 913
    Par défaut
    Il faut vérifier ton code qui utilises vector, comment gères tu la mémoire liée à tes vector ? en dynamique ?

    Apparement, l'erreur indique qu'il cherche à détruire la mémoire utilisée par le vector alors que cette mémoire n'existe plus.

    Est ce que tu ne détruis pas deux fois de suite un élément ?

  11. #11
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Exception avec builder
    merci pour ta reponse,
    on cherchant dans ce sens j'ai decouvert que j'ai un problème de dimension, il me fait l'exception une dimention particulière et dés que je diminue de 1 ça marche.
    je vais explorer mon code, j'espere que je trouverai le pbm
    merci

  12. #12
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Exception avec c++ builder
    merci a tous, surtout a toi free07, tas raison, je détruit un vector de dimension n+1, alors que je reserve un vector de dimension n.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détection de la fermeture d'une application
    Par vanitom dans le forum MFC
    Réponses: 6
    Dernier message: 19/08/2005, 18h11
  2. Fermeture/Ouverture d'application avec VC++
    Par Philippe299 dans le forum MFC
    Réponses: 2
    Dernier message: 11/08/2005, 21h17
  3. [Event]Annuler la fermeture d'une application
    Par willowII dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 16/11/2004, 09h28
  4. Conseils pour developper une application avec Oracle
    Par belugha dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 02/06/2003, 16h03
  5. [VB6]Fermer une application avec VB
    Par Mylou dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/04/2003, 21h32

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