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 :

Erreur de violation d'accés après la mise en place d'un TMainMenu


Sujet :

C++Builder

  1. #1
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut Erreur de violation d'accés après la mise en place d'un TMainMenu
    Bonjour

    J'utilise BCBv4. J'ai mis une barre de menu principale TMainMenu. Depuis lorsque je ferme ma fenetre, j'ai l'erreur de violation d'accés.

    En faisant du pas à pas, l'erreur se produit au moment de la destruction de la Form. J'aimerais savoir si il faut faire quelque chose de particulier lors de l'integration d'un TMainmenu pour eviter cette erreur?


    merci
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  2. #2
    Responsable Magazine

    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 : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Soit c'est le bcb qui a bugé (ca arrive), dans ce cas il faut supprimer les fichiers .obj, et demandé la reconstruction du projet.
    Sinon c'est que tu as un pointeur dans ton code que tu utilise mal est qui déborde, et lors de l'ajout du MainMenu, l'adressage du pointeur à changé et à donc écrasé autre chode d'important pour ton programme qui bug la fermeture de celui ci.
    Moi je penche plutot pour la deuxième solution
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  3. #3
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Je sais, c'est la première des choses que j'ai regardé ( le problème de pointeur, d'ailleurs j'ai aussi par la suite supprime le .obj ).

    Tous les opérateurs new, ont leur delete. Mes pointeurs sont du type soit TCheckbox, TRadio, et TPrinter et ils sont local à une fonction. Je n'utilise pas new car cela me provoque des erreurs ( TCheckBox *Box = new TCheckBox devrai marché? non?).

    Et si je me rappel bien, lorsque un pointeur est dans une fonction locale, il est "supprimer" de la plage mémoire... non?
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  4. #4
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Bon j'ai regardé ici et Mr Henderson a donné la solution probable.

    J'essaye depuis quelque temps et j'ai pas d'erreur.

    Merci de ton aide Pottier.
    Ma recherche sur le forum n'avait pas été bon ...
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  5. #5
    Responsable Magazine

    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 : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Citation Envoyé par Masmeta
    Tous les opérateurs new, ont leur delete. Mes pointeurs sont du type soit TCheckbox, TRadio, et TPrinter et ils sont local à une fonction. Je n'utilise pas new car cela me provoque des erreurs ( TCheckBox *Box = new TCheckBox devrai marché? non?).
    Il est possible de faire un new de tout les composant VCL, mais ceci demande en parametre l'adresse de l'objet qui l'a implémenté, donc tu peut simplement mettre NULL, ou alors mettre par exemple l'adresse de ta Form

    Citation Envoyé par Masmeta
    Et si je me rappel bien, lorsque un pointeur est dans une fonction locale, il est "supprimer" de la plage mémoire... non?
    Pour que les adresses que tu alloue en faisant ton new soit libéré il faut obligatoirement faire un Delete, sinon elle reste alloué et l'OS interdit de les utilisé puisqu'elle à été reservé par ton programme, l'enuis c'est que lorsque tu sort de ta fonction tu n'a plus l'adresse a ou tu as alloué ta mémoir (adresse contenu dans le pointeur) il faut donc désalloué avec delete a la fin de la fonction ou alors mémorisé l'adresse quelque part dans le programme pour le faire plus tard, maintenant il est vrai qu'un programme créé avec BCB désalloue toute la memoire alloué mais seulement à la fermeture de ton programme.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  6. #6
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    ok merci de ses précisions.

    Si je comprend bien je dois faire un TCheckbox *box =new; et finir par delete box ?
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  7. #7
    Responsable Magazine

    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 : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    oui sauf que la ligne exacte pour le new est
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    TCheckBox * box = new TCheckBox(this) ;
    ou
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    TCheckBox * box = new TCheckBox(NULL) ;
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  8. #8
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    d'accord merci.
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/12/2006, 15h18
  2. [BSD 2006] Erreur de violation d'accès sur un ShowModal
    Par doudoustephane dans le forum C++Builder
    Réponses: 36
    Dernier message: 14/10/2006, 12h10
  3. [D7] Erreur de violation d'accès
    Par plante20100 dans le forum Langage
    Réponses: 10
    Dernier message: 26/08/2005, 11h05
  4. Violation d'acces apres Execute
    Par SegmentationFault dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 10/08/2004, 16h23
  5. Violation d'accès apres Close
    Par SegmentationFault dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/07/2004, 16h46

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