with Unchecked_Deallocation; with ada.text_io; use ada.text_io; with ada.integer_text_io; use ada.integer_text_io; procedure danglingref is type Box is record l, w: Integer := 0; end record; type BoxPtr is access Box; procedure dispose is new Unchecked_Deallocation(Box, BoxPtr); procedure put_line(aBoxPtr: BoxPtr) is begin put(aBoxPtr.all.l); put(aBoxPtr.all.w); new_line; end put_line; p, q: BoxPtr; begin p := new Box'(1, 2); put_line(p); -- output: 1 2 q := p; -- Create an alias dispose(q); put_line(p); -- output unpredictable (example: 0 2) q := new Box'(3, 4); -- p may be an alias to the new object put_line(p); -- may output 3 4 p.all.w := 99; put_line(q); -- may output 3 99 end danglingref; -- Typical Output: -- 1 2 -- 0 2 -- 3 4 -- 3 99