ja klar, du hast jetzt aus dem i einen Pointer gemacht, bzw. ihn mit dessen Wert "nil"/0 gefüllt.
Das hat aber nichts mit dem zu tun, was "in" den Pointer ist, bzw. worauf der Zeigt.
Delphi-Quellcode:
var
S: String;
P1, P2: Pointer;
S := '';
P1 := PChar(S);
P2 := Pointer(S);
ShowMessage(Format('%p %p', [P1, P2]));
if PByte(P1)^ = 0 then ;
if PByte(P2)^ = 0 then ; // zugriffsverletzung