35 lines
1.2 KiB
Ada
35 lines
1.2 KiB
Ada
|
with Piles;
|
||
|
with Ada.Text_IO; use Ada.Text_IO;
|
||
|
|
||
|
-- Montrer le risque d'autoriser l'affectation entre variables dont le type
|
||
|
-- est une structure chaînée.
|
||
|
procedure Illustrer_Affectation_Pile is
|
||
|
package Pile is
|
||
|
new Piles (Character);
|
||
|
use Pile;
|
||
|
|
||
|
procedure Afficher is
|
||
|
new Pile.Afficher (Put);
|
||
|
|
||
|
P1, P2 : T_Pile;
|
||
|
begin
|
||
|
-- construire la pile P1
|
||
|
Initialiser (P1);
|
||
|
Empiler (P1, 'A');
|
||
|
Empiler (P1, 'B');
|
||
|
Afficher (P1); New_Line; -- XXX Qu'est ce qui s'affiche ? [ A, B >
|
||
|
|
||
|
P2 := P1; -- XXX Conseillé ? non car si on supprime l'un des deux pointeurs, cela peut mener à des erreurs.
|
||
|
-- -> le limited private permet d'empecher cette erreur
|
||
|
pragma Assert (P1 = P2);
|
||
|
|
||
|
Depiler (P2); -- XXX Quel effet ? le sommet de la pile P2 est deallocated, donc P1 pointe vers de la mémoire libéré
|
||
|
Afficher (P2); New_Line; -- XXX Qu'est ce qui s'affiche ? [ A >
|
||
|
Afficher (P1); New_Line; -- XXX Qu'est ce qui s'affiche ? [ truc bizarre, >
|
||
|
-- XXX Que donne l'exécution avec valkyrie ?
|
||
|
|
||
|
Depiler (P1); -- XXX correct ? non car on essaye de Free un espace mémoire qui a déjà été libéré.
|
||
|
-- free(): double free detected in tcache 2
|
||
|
-- raised PROGRAM_ERROR : unhandled signal
|
||
|
end Illustrer_Affectation_Pile;
|