Beim .Free gibst du die MMF-Handles/Pointer nicht mit frei.
Diese bleiben aktiv/nutzbar, selbst wenn man das FileHandle schließt.
Ab Delphi 2009 könnte/wird es einige Probleme mit deinen PChars geben.
PS:
Delphi-Quellcode:
SetString(AValue, nil, LineLen);
CopyMemory(PChar(AValue), StartPointer, LineLen);
// aka
SetLength(AValue, LineLen);
CopyMemory(PChar(AValue), StartPointer, LineLen);
// entspricht
SetString(AValue, StartPointer, LineLen);