Meine Hilfe (XE3) kennt TIniFile.GetStrings nicht.
Ich setze mal voraus, dass damit alle Textzeilen nach SL kopiert werden.
Mit SL.Free wird diese StringList wieder freigegeben.
Da Result und SL den gleichen Speicherbereich referenzieren, wird damit auch Result freigebenen.
Somit gibst Du einen gelöschten/ungültigen Verweis aus Deiner Funktion heraus.
Du könntest 3 Lösungsansätze wählen:
1) Du verzichtest auf SL.Free und gibst somit eine existierende Stringlist heraus.
Dann solltest Du aber das Ergebnis an anderer Stelle wieder freigeben, damit Du nicht ein Memoryleak erzeugst und den Speicher vollmüllst.
2) Du erzeugst Deine SL vor der Funktion und übergibst diese als Parameter.
Dann hat die Funktion (oder Prozedur) nur die Aufgabe, SL zu füllen, aber nicht zu erzeugen.
Der Vorteil zu 1) ist, dass klarer ist, wo SL wieder freigegeben werden muss.
3) Du könntest aus der Funktion auch nur den reinen Text als String heraus geben.
Delphi-Quellcode:
function MyFunc: String;
var
sl: TStringList;
begin
sl := TStringList.Create;
try
IniFile_.GetStrings(sl); // TMemIniFile
...
...
Result := sl.Text;
finally
sl. Free;
end;
In dem Fall könntest Du einfach den Text weiter verarbeiten und musst Dioch nicht um die Speicherfreigabe kümmern.