TP-programmation-imperative/tp08/illustrer_affectation_pile.adb
2023-06-10 21:03:54 +02:00

35 lines
1.2 KiB
Ada
Executable file

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;