This function is causing a horrible memory leak, i am unsure as too why and was hoping you smart people could educate me!

[pascal]function Split(Source : String; Delimiter : String) : TStringList;
Var Cur, NCur:string;
begin
Result := TStringList.Create;
Cur := Source;
If Pos(Delimiter, Cur) = 0 Then
Begin
Result.Add(Cur);
End;
While Pos(Delimiter, Cur) > 0 Do
Begin
NCur := Copy(Cur, 0, Pos(Delimiter, Cur) - 1);
Result.Add(NCur);
Cur := Copy(Cur, Pos(Delimiter, Cur) + (Length(Delimiter) - 1) + 1, Length(Cur));
If Pos(Delimiter, Cur) = 0 Then
Begin
Result.Add(Cur);
End;
End;
Result.Free;
end;[/pascal]