var
Puntero: ^Integer;
dir: string;
begin
New(Puntero);
Puntero^ := 5;
dir := Format('%p', [Puntero]);
WriteLn('Direccion: ', dir, ' valor: ', Puntero^);
Dispose(Puntero);
WriteLn('Puntero eliminado');
dir := Format('%p', [Puntero]);
if(Puntero <> nil) then
WriteLn('Direccion: ', dir, ' valor: ', Puntero^)
else
WriteLn('El puntero es nulo');
readln;
end.
el resultado (en delphi modo consola) fue:
Direccion: 00A84E40 valor: 5
Puntero eliminado
Direccion: 00A84E40 valor: 5
Lo que hace el New es solicitar memoria, el espacio de memoria asignado, queda excusivamente para el uso del programa que lo solicito y no será entregado a ningun otro programa.
Cuando haces Dispose, esa reservación caduca, si bien el puntero sigue apuntado a la direccion de memoria de antes, que sigue teniendo el mismo valor, si otro programa, o en defecto, el tuyo, vuelve a pedir memoria, tal vez se le reserve, otra vez esa direccion de memoria.
Por eso siempre despues de Dispoe, hay que asignar NIL al puntero.