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;