Das zeigt ganz gut, warum es keine so gute Idee ist, wenn eine Funktion eine Stringlist erstellt und zurückgibt. Es ist unklar, wessen Aufgabe es ist, sie wieder freizugeben. Eindeutiger ist es, eine Stringliste als Übergabeparameter der Funktion zu deklarieren.
Code:
StrListCalc := TStringList.Create;
ZeissCFG.BuildNewFile(StrListCalc, CFGValues, ValuesX, ValuesY, ValuesZ, DataLoaded);
...
StrListCalc.Free;
Die Funktion müsste natürlich entsprechend angepasst werden.