Pointeur de tableau de pointeurs de strings.... - Ada - Programmation
Marsh Posté le 15-01-2007 à 04:15:27
Hmm.. Laissez tomber, je vais me coucher. J'ai bidouillé un truc tout crade, et ça marche. Tant pis pour la beauté du code, je n'ai plus le temps de chercher...
J'en ai marre d'avoir des nuits de 2h...
Marsh Posté le 15-01-2007 à 19:18:12
HO PUTAIN ! Raaa pourquoi j'ai pas vu ça... Je.. Je me suis ridiculisé là.. Mettons ça sur le compte de la fatigue ^^. Ce qui est encore plus ridicule, c'est la méthode que j'ai utilisé pour remplacer ces magnifiques types. Enfin bon, ma présentation s'est bien passée, et les gonzes n'y ont vu que du feu.
Je m'en veux quand même d'avoir passé autant de temps à chercher la réponse à ce problème sans jamais la trouver.. Parfois ce sont les trucs les plus simples qui sont les plus difficiles..
Merci d'avoir répondu dans de si brefs délais !
Marsh Posté le 14-01-2007 à 22:35:58
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