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 :

erreur fin procedure


Sujet :

Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2010
    Messages : 270
    Points : 391
    Points
    391
    Par défaut erreur fin procedure
    Bonjour,

    Cela fait un peu plus d'un an que je développe sous Delphi et il ne m'était jamais arrivé ça, j'obtiens une violation d'accès à la fin d'une procédure...
    Le code de ma procédure s'exécute, aucune erreur et l'exception apparait sur le end...

    Avez-vous déjà eu ce cas la?

  2. #2
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par titou31000 Voir le message
    Bonjour,

    Cela fait un peu plus d'un an que je développe sous Delphi et il ne m'était jamais arrivé ça, j'obtiens une violation d'accès à la fin d'une procédure...
    Le code de ma procédure s'exécute, aucune erreur et l'exception apparait sur le end...

    Avez-vous déjà eu ce cas la?
    Utilise les points d'arrêt, mets des showmessages un peu partout.

    Sans le programme c'est chaud de t'aiguillé, et puis de quelle erreur exactement tu parles ?

    Surement un Free mal placé...

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2010
    Messages : 270
    Points : 391
    Points
    391
    Par défaut
    J'ai utilisé ces deux moyens pour essayer de trouver ce qui n'allait pas, en vain... Le compliateur ne me surligne même pas la ligne, c'est juste que en pas à pas, c'est le end qui déclenche l'exception.

    L'erreur est une EAccessViolation avec message "Violation d'acces à l'adresse...dans le module...Lecture de l'adresse..."

    C'est vrai que j'utilise des free dans ma procédure, il doit y avoir une libération qui flanche.

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par titou31000 Voir le message
    ...C'est vrai que j'utilise des free dans ma procédure, il doit y avoir une libération qui flanche.
    C'est partiquement sûr...

    Je me suis déjà aussi fait avoir, reprend ton programme...

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2010
    Messages : 270
    Points : 391
    Points
    391
    Par défaut
    Oui je vais revoir tout ça!!

    Tu penses que je dois revoir tout le programme ou seulement la procédure qui fait apparaitre l'erreur?

  6. #6
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par titou31000 Voir le message
    Oui je vais revoir tout ça!!

    Tu penses que je dois revoir tout le programme ou seulement la procédure qui fait apparaitre l'erreur?
    Regarde dans ta procédure si tu utilise un TStringlist qui serais libéré avant par exemple...

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 662
    Points : 25 447
    Points
    25 447
    Par défaut
    Lors du End, cela libère implicitement les record, les tableaux fixes et les chaines locales !

    Tu as peut-être écrit trop loin dans un tableau et modifier une autre zone mémoire

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2010
    Messages : 270
    Points : 391
    Points
    391
    Par défaut
    Ca voudrait peut être dire que le end essaye de libérer une zone mémoire qui est déjà libérée ou pas du tout?

  9. #9
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Si tu nous montrais le code, je pense qu'il serait plus facile de trouver d'où vient ton soucis ...

  10. #10
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Lors du End, cela libère implicitement les record, les tableaux fixes et les chaines locales !
    Et ça libère aussi les interfaces. Si tu as un pointeur sur une interface qui a été libéré (peu probable mais ca m'est déjà arrivé), tu as un plantage au end.

  11. #11
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Autre cas ou le end plante : si dans tes variables locales tu as un tableau et que tu écrits en dehors des limites. Tu peux détruire l'adresse de retour dans la pile CPU.
    Ou que tu écrits de la même manière dans une chaine et/ou un objet local.

  12. #12
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2010
    Messages : 270
    Points : 391
    Points
    391
    Par défaut
    Bonjour,

    Merci a vous tous de vous pencher sur mon cas!! je suis toujours à la recherche de m'allocation mémoire qui me produit ce gentil message, mais je ne désespère pas

  13. #13
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 662
    Points : 25 447
    Points
    25 447
    Par défaut
    Tient lit ce sujet Comment éviter l'erreur eAccessViolation en Delphi avec try except ?
    C'était justement une mauvaise démonstration de Violation d'Accès, c'est un cas possible pour ton problème

    Sinon n'est pas forcément une allocation mais ceci par exemple

    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
    var
      i : Integer;
      T10: array[1..10] of Integer;
      T5: array[1..5] of Integer;
      // k: integer;
      // b: byte;
    begin
      for i := 1 to 10 do
        T10[i] := i;
     
      for T5 := 1 to 10 do // Oups mauvaise borne !
        T5[i] := i; // la c'est soit ça passe, soit ça plante totalement
     
      // en activant k et b, tu verras ce que ça donne !
     
      for i := Low(T10) to High(T10) do
        ShowMessage(IntToStr(T10[i])); // devrait afficher -1 à -10 
     
      for i := Low(T5) to High(T5) do
        ShowMessage(IntToStr(T5[i])); // devrait afficher 1 à 10 (si l'écriture passe, la lecture en général passe aussi)
     
    end;

    Pour se protéger, toujours utiliser des bornes vérifiées !

    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
    var
      i : Integer;
      T10: array[1..10] of Integer;
      T5: array[1..5] of Integer;
    begin
      for i := Low(T10) to High(T10) do
        T10[i] := -i;
     
      for i := Low(T5) to High(T5) do
        T5[i] := i;
     
      for i := Low(T10) to High(T10) do
       ShowMessage(IntToStr(T10[i])); // devrait afficher -1 à -10 
     
      for i := Low(T5) to High(T5) do
       ShowMessage(IntToStr(T5[i])); // devrait afficher 1 à 5 
     
    end;
    d'ailleurs, teste le code suivant !
    Cela te montre comment via T5 on peut déborder sur T10

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var
      i : Integer;
      T5: array[1..5] of Integer;
      T10: array[1..10] of Integer;
    begin
      for i := Low(T10) to High(T10) do
        T10[i] := -i; // T10 ne contient que du Négatif !
     
      for i := 1 to 14 do // 5 + 9, oui oui ça déborde !
        T5[i] := i;
     
      for i := Low(T10) to High(T10) do
       ShowMessage(IntToStr(T10[i])); // devrait afficher 6 à 14 et -10 ! 
    end;

  14. #14
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut
    Est-ce que tu as coché toutes les options (sauf l'optimisation) dans la compilation du projet ? Vérification des débordements et tutti quanti ...
    ça peut aider

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

Discussions similaires

  1. Erreur creation procedure stockées (Firebird1.5+delphi 7)
    Par nassoft dans le forum Bases de données
    Réponses: 3
    Dernier message: 18/05/2007, 12h30
  2. Erreur de "Procedure too large"
    Par Tintou dans le forum VBA Access
    Réponses: 4
    Dernier message: 14/05/2007, 08h37
  3. Erreur Dans Procedure Pl/sql
    Par Redwings dans le forum PL/SQL
    Réponses: 5
    Dernier message: 07/11/2006, 15h40
  4. erreur compilation procedure
    Par lazzeroni dans le forum Oracle
    Réponses: 1
    Dernier message: 30/06/2006, 11h49
  5. Erreur: Fin de fichier inattendue.
    Par Berzerk_ dans le forum C++
    Réponses: 22
    Dernier message: 01/06/2006, 17h07

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