Je suis vraiment désolé de vous embêter encore... Je dois "soutenir" un projet demain, et je bloque lamentablement sur la gestion des erreurs de mon programme.. Mon problème est le suivant :
Admettons que j'aie un paquetage de nom "paquetage".
Dans mon .ads, j'ai mis les types suivant :
type Erreur is record Ligne : Integer; Colonne : Integer; Message : Pointeur_Chaine; end record;
type tabErreurs is array(0..255) of Erreur;
type adTabErreurs is access tabErreurs;
procedure leverErreur(E : in Erreur ; TableauErreurs : in out adTabErreurs); TErreurs : adTabErreurs := new tabErreurs; |
En sachant que Pointeur_Chaine est définit dans un autre paquetage, et que c'est un access string.
A présent, je veux pouvoir utiliser ces types, cette procédure, et cette variable globale dans paquetage.adb, et dans mon programme principal.
Donc admettons que dans paquetage.adb j'ai :
erreur2: Erreur; erreur2.Ligne := 10 put_line(integer'image(erreur2.Ligne); erreur2.Colonne := 3; erreur2.Message.all := "message d'erreur"; leverErreur(erreur2,TErreurs); |
En gros je veux me trimballer un tableau d'erreurs dans tout mon programme. A chaque fois que je rencontre une erreur, j'appelle ma procédure leverErreur, qui ajoute une ligne dans TErreurs. Actuellement j'utilise les exceptions d'Ada, mais ça deviendrait encore plus sale si je devait y passer d'autres informations (comme ici les lignes et les colonnes). J'aimerais donc remplacer mes "raise" par ma procédure leverErreur.
Le 10 s'affiche bien, mais j'ai une erreur sur l'avant dernière ligne de ce bout de programme.. Le programme compile, mais j'ai ça à l'exécution :
access check failed
Bref, le problème vient certainement de ma gestion des strings, et des pointeurs.. j'avoue que là j'en perd un peu mon latin. Les types ont l'air d'aller, mais pourtant ça ne marche pas... Peut-être que la solution est évidente, et que vous pourrez m'aider ! Ca fait des heures que je suis sur ce problème..
Merci beaucoup !!
Message édité par Docteur_Cube le 14-01-2007 à 22:44:35