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

Delphi Discussion :

Violation d'accès après l'ajout d'une variable


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut Violation d'accès après l'ajout d'une variable
    Bonjour,

    Je développe sous delphi 2005. J'ai dans mon programme une Frame A TA = class (TFrame). Cette frame est incluse dans une autre frame princiaple TPrincipale = class (TFrame) de manière assez basique. Le code du dfm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    inherited Prncipale: TPrincipale
    ...
    ...
      inline A : TA
    J'ai effectué des modifications dans ma classe A et j'ai eu une erreur Access Violation. J'ai investigué ma modification et puis je l'ai réduite à une simple affectation de variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    TA = class (TFrame)
    ...
    ...
    procedure proc;
    var
     _temp  : integer;
    begin
    ...
    _temp := 5;
    ....
    J'ai quand même cette Access Viloation au bout de 2 ou 3 appels à la méthode qui contient cette instruction et dés que je l'enlève (l'instruction d'affectation) le programme ne me retourne plus d'erreur même après plusieurs appels. Je vois pas du tout ce qui pourrait provoquer cette violation d’accès. Si quelqu'un a une idée ça m'aiderait beaucoup.

    le message d'erreur est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Le projet a déclenché la classe d'exception EAccessViolation avec le message "violation d'accès à l'adresse 0E2417525 " écriture dans l'adresse ...
    Merci

  2. #2
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Peux tu développer ton code ? Ou est appelée cette procédure ? Ou et quand est créé ta FrameA ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    alors pour ma procédure c'est plutôt une procédure d'initialisation. Il y a bien une capture d'exception dans la procédure. mais qui n'est pas lié à cette instruction.
    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
     
    TA = class (TFrame)
    ...
    ...
    procedure proc;
    var
     _temp  : integer;
    begin
    try
    ...
    _temp := 5;
    ....
     
    except on E: Exception do ShowMessage(E.Message)
    end;
    pour ce qui est de l'appel de cette procédure elle est appelé par la classe Principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       TPrincipale = class (TFrame)
       a : TA;
    ...
    procedure _init;
    begin
    ...
       a.proc
    ...
    end;
    Le souci c'est que je vois pas comment cette petite modif peut influencer l'exécution du programme ou l'allocation mémoire avec cette Access Violation

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    vu que tu nous donne un code totalement hors contexte avec ce qui te semble être une erreur et qui n'est pas même compilable en l'état, il est difficile de te répondre.

    je te propose de prendre un projet vierge, dans lequel tu places deux frames et une fonction bidon qui reproduit l'erreur et de poster le tout, là on pourra te dire où est le problème.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    Je m'excuse. mais mon programme est très long et avec plusieurs fonctionnalités. Ca serait pas compréhensible de le mettre ici. C'est pour ça que j'ai essayé de montrer les parties modifiées mais c'est pas plus claire c'est vrai.

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    je reprend une parti de ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure _init;
    begin
    ...  // il manque pas  a := TA.Create(...) ;
       a.proc ;// est tu sure que "a" est instancié a ce moment là ?
          // si j'ai bien compris c'est un tframe dans un tframe  
    ...
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    C'est pas très clair en effet.

    Ce qui pourrait se passer en admettant que ce soit TPrincipale._Init est que cette méthode soit appelée depuis un constructeur modifié dans lequel :

    • inherited est manquant ;
    • l'appel à _Init se fait avant inherited.


    Dans le premier cas a ne sera jamais instancié, dans le deuxième, trop tard

    C'est un problème qui ne se verra qu'en runtime.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/01/2012, 17h01
  2. Réponses: 0
    Dernier message: 04/02/2009, 12h36
  3. [SCrollPane] Soucis après l'ajout d'une image
    Par Jefeh dans le forum Composants
    Réponses: 1
    Dernier message: 29/09/2008, 09h51

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