Comment identifier l'origine de "EAccessViolation" ? - Delphi/Pascal - Programmation
Marsh Posté le 26-04-2011 à 21:59:14
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.
Marsh Posté le 27-04-2011 à 00:38:34
billgatesanonym a écrit : Ce type d'erreur peut apparaître pour des raisons très variées. |
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.
Marsh Posté le 26-04-2011 à 18:13:14
Bonjour à tous
J'ai ce message qui apparaît, régulièrement et au même endroit de mon prog :
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