Du hast da gleich mehrere Fehler in deinem Code:
1. Die Objekte SK und SL werden niergends erstellt. Sind also beim Zugriff der ersten ZK.xxxx oder ZL.xxx noch nil oder zeigen auf einen nungültigen Memoryberech, weil du da globale Variablen nuzzt. Damit ist eine
AV die logische Folge.
2. Du gibst das im unteren Teil des Codes SK frei mit SK.Free. Also danach ist SK ungültig und zeigt auf einen ungülitgen Memorybereich. Eine Zeile später greifst du ber gleich wieder auf diese nun ungültige Objektinstanz zu, was dann zu dem Invalid Pointer führt.
3. Solltest du so Sachen in einem try/finally schützen.
Delphi-Quellcode:
sk := TStringlIst.Create;
sl := TStringlIst.Create;
try
... // deine Code, der mit sk arbeitet.
finally
sk.free; // Am Schluss, wenn du sk/sl nicht mehr benötigst, sk/sl freigeben
sl.Free;
end;