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 averti
    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
    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 averti
    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
    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 averti
    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
    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 Expert
    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 : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    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.

  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 averti
    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
    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 averti
    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
    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 �m�rite
    Avatar de free07
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    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 : 941
    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 averti
    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
    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 averti
    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
    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