No, no puedes hacerlo así, primero hay que liberar la memoria y luego asignarle nil a la misma.
Por eso el orden correcto es
x.free;
x:=nil;
o más cómodo:
freeandnil(x);
Si lo haces al revés, asignas nil, entonces cuando llamas a free no hace nada porque está a nil.
Edito: he contestado lo de antes sin haber visto tu último mensaje