Cherchez l'erreur : access check failed. - Ada - Programmation
MarshPosté le 28-02-2011 à 12:22:56
Bonjour, J'écris un petit programme qui redistribue un montant équitablement entre les utilisateur. Bon, mis à par que mon algo principale n'est peut-être pas le meilleur, j'ai un problème d'initialisation de pointeur sur une chaîne de caractère.
A l'appel de "Print" pour une 'donation', après appel à "Balance", procédure dans laquelle je construit un tableau de 'Donation' , à l'exécution j'ai droit à un "acces check failed" sur la ligne 8 du code de "print".
Quelques définition :
Code :
type User_Type is
record
Id : access String;
Sum : Float := 0.0;
endrecord;
type User_Access isaccessall User_Type;
type Donation_Type is
record
Source : access String;
Target : access String;
Sum : Float := 0.0;
endrecord;
type Donation_Access isaccessall Donation_Type;
Code :
procedure Create(User : out User_Access;
Id : in String;
Sum : in Float)is
begin
User := new User_Type ' (Id => new String ' (Id),
Sum => Sum);
end Create;
Code :
procedure Add(User : in User_Access;
To : inout Users_Access)is
Temp : Users_Access;
begin
if(To /= null)then
Temp := new Users_Table(1..To'Length + 1);
else
Temp := new Users_Table(1..1);
endif;
if(To /= null)then
for Index in1..To'length loop
Temp(Index) := To(Index);
endloop;
endif;
Temp(Temp'Length) := User;
To := Temp;
end Add;
Code :
procedure Create(Donation : out Donation_Access;
Source : access String;
Target : access String;
Sum : in Float)is
begin
if((Source = null)or(Target = null))then
raise Donation_Error;
endif;
Donation := new Donation_Type ' (Source,
Target,
Sum);
end Create;
Code :
procedure Print (Donation : in Donation_Access)is
begin
if(Donation /= null)then
raise Donation_Error;
endif;
New_Line;
Put_line("Source : " & Donation.Source.all);
Put_line("Target : " & Donation.Target.all);
Put ("Sum : ");
Put(Donation.Sum);
end Print;
Code :
function Total(Users : in Users_Table)return Float;
Marsh Posté le 28-02-2011 à 12:22:56
Bonjour,
J'écris un petit programme qui redistribue un montant équitablement entre les utilisateur.
Bon, mis à par que mon algo principale n'est peut-être pas le meilleur, j'ai un problème d'initialisation de pointeur sur une chaîne de caractère.
A l'appel de "Print" pour une 'donation', après appel à "Balance", procédure dans laquelle je construit un tableau de 'Donation' , à l'exécution j'ai droit à un "acces check failed" sur la ligne 8 du code de "print".
Quelques définition :
J'arrive pas à trouver l'erreur.