Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2275 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Comment identifier l'origine de "EAccessViolation" ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment identifier l'origine de "EAccessViolation" ?

n°2072083
HERIBERT
Posté le 26-04-2011 à 18:13:14  profilanswer
 

Bonjour à tous :)
 
J'ai ce message qui apparaît, régulièrement et au même endroit de mon prog :  
 
http://hfr-rehost.net/self/pic/005544cfe03234e0facfb9e99e7f2297ab953f28.png
 

Code :
  1. SetLength(Tab_Char, Surface_Fiche_Ds_Base);  // Alloc du Tab dynamique de char
  2. Ptr_Tab_Char := addr(Tab_Char[0]);  // Ptr_Tab_Char pointe sur le début de Tab_Char
  3. Move(Ptr_Mob_Buffer_Base_Concatenee^, Ptr_Tab_Char^ , Surface_Fiche_Ds_Base); // Copie d'un bloc mémoire dans Tab_Char


 
Le principe : 1 - allocation de Tab_Char : lui donne la surface mémoire désignée par Surface_Fiche_Ds_Base
                 2 - Move : je copie la source (un bloc mémoire) ds Tab_Char
                 3 - je cherche une chaîne
                 4 - je désalloue systématiquement Tab_Char par SetLength(Tab_Char, 0)
                 5 - On revient à 1
 
et ainsi de suite.  
 
J'ai l'impression que c'est une erreur d'allocation mémoire. Mais comment diagnostiquer une erreur de ce type ? Quelle routine utiliser ?  
 
Merci :)

mood
Publicité
Posté le 26-04-2011 à 18:13:14  profilanswer
 

n°2072105
billgatesa​nonym
Posté le 26-04-2011 à 21:59:14  profilanswer
 

Ce type d'erreur peut apparaître pour des raisons très variées.
 
Donc, comme toujours quand on débugue, il ne faut pas avoir d'idée préconçues.
Il faut relire son code soigneusement et recueillir des informations, par exemple en mettant des traces dans le programme, pour les étudier quand le problème surviendra.
 
Le mot "désalloue" en gras me fait un peu peur, car j'ai déjà vu des programmeurs qui ont fait des erreurs en voulant être trop "propres". En fait, le problème survenait parce qu'il y avait trop de désallocations. Donc, il ne faut pas faire de choses "systématiquement", mais faire les choses intelligemment, et c'est plus facile à dire qu'à faire.
 
Bon courage.

n°2072119
HERIBERT
Posté le 27-04-2011 à 00:38:34  profilanswer
 

billgatesanonym a écrit :

Ce type d'erreur peut apparaître pour des raisons très variées.
 
Donc, comme toujours quand on débugue, il ne faut pas avoir d'idée préconçues.
Il faut relire son code soigneusement et recueillir des informations, par exemple en mettant des traces dans le programme, pour les étudier quand le problème surviendra.
 
Le mot "désalloue" en gras me fait un peu peur, car j'ai déjà vu des programmeurs qui ont fait des erreurs en voulant être trop "propres". En fait, le problème survenait parce qu'il y avait trop de désallocations. Donc, il ne faut pas faire de choses "systématiquement", mais faire les choses intelligemment, et c'est plus facile à dire qu'à faire.
 
Bon courage.


J'ai pensé à ça aussi :( J'ai laissé la désalloc finale du Tab_Char, et enlevé toutes les réallocs. C'est le même pb : au 76 ième passage dans la boucle, plantage.  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Comment identifier l'origine de "EAccessViolation" ?

 

Sujets relatifs
Identifier un phénomène de répétition inconnu dans une liste de X nombIdentifier une machine sur un reseau avec le meme FAI
determiner l'origine d'un fichierProblème CSS : Espace non désiré d'origine inconnue sous les images
Malware apparaissant sur mon site ? Origine ?Formulaire PHP, retour sur ma page d'origine
[EXCEL] Identifier la cellule sélectionnée[résolu] Regex pour identifier les bons couples span /span
Redéfinir la position du point d'origine d'une imageest il possible d'identifier des doublettess ou des triplettes ?
Plus de sujets relatifs à : Comment identifier l'origine de "EAccessViolation" ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR