Zitat von
p0w3r5tr34m3r:
list2 := list1
ich nehme an das es zu ner AccessViolation kommt da list2 keinen Speicher reserviert bekommt.
Musst die liste schon erstellen damit sie speicher hat.
Na wo ist das Problem? Es wird TStringList.Create aufgerufen, der Instanzenpointer auf das erzeugte Objekt wird in list1 gespeichert und anschließend nochmal in list2. Das heißt, list1 und list2 zeigen beide auf die gleiche Instanz einer TStringList.
Bei solchen Funktionen, die eine Instanz erzeugen und den Instanzenpointer zurückgeben, muss immer der Caller die Instanz freigeben. Klar, denn wenn der Callee sie freigibt, kann der Caller nichts mehr damit anfangen.
Nebenbei ist eine gute Alternative dazu, eine Klasseninstanz per Parameter zu übergeben, mit der die Prozedur/Funktion dann arbeitet.