Buenas tardes:
Acá de nuevo yo con mis dudas (existenciales jeje).
Tengo una lista doblemente enlazada la cual inicializo así:
Cab y Fin, son los punteros Cabecera y Final que están declarados como una variable tipo PunteroLista y éste tipo tiene esta estructura:
 
  PunteroLista = ^NodoLista;
  NodoLista = record
    Datos : TipoDatos;
    Sig : PunteroLista;
    Ant : PunteroLista;
  end;
 
 
En un momento del código, necesito consultar un dato, cuyo procedimiento es este:
 
procedure ConsultarDato(Info : TipoDatos; var Encontrado : boolean; var Act, Ant : PunteroLista);
 
begin
  Ant := Cab;
  Act := Ant^.sig;
 
  while not (Act^.Datos.Nombre = Info.Nombre) and (Act <> nil) do
  begin
    Ant := Act;
    Act := Act^.sig;
  end;
 
  if (Act^.Datos.Nombre = Info.Nombre) then
    Encontrado := true
  else
    Encontrado := false;
end;
 
 
TipoDatos es un tipo con diferentes campos.
Ok. Fíjense en las dos primeras líneas de éste procedimiento. Ant := Cab copia la información de Cab en la variable Ant, por lo que en la primera pasada Ant debe ser Nil y apuntar a Nil (¿no?). Le puse un watch a esta variable (Ant) y efectivamente, en la primera pasada toma el valor Nil.
En la segunda línea, Act pasa a ser el valor apuntado por Ant^.sig, que, como Ant apunta a Nil, Act debería valer Nil (¿no?), por lo que, en la primera pasada, el while que viene no se ejecutaría.
Pues no. Le puse un watch a la variable Act y ésta no toma el valor Nil y el while se ejecuta dos veces antes de que Act tome el valor Nil. En la primera pasada del while (desde Act := Ant^.sig), Act toma el valor PTR($FF02,$E07), en la segunda pasada toma el valor PTR($6030,$18FC), terminando la segunda pasada (en la instrucción Act := Act^.sig), toma el valor Nil.
¿Qué estoy haciendo mal?