Seite 1 von 1

Frage zu InitializeStructure()

Verfasst: 10.05.2015 22:28
von captain_hesse
Hallo zusammen
Ich arbeite aus kompatibilitätsgründen zur Zeit mit der LTS 5.24 und dort steht in der PB Hilfe
Warnung: mehrfache Aufrufe von InitializeStructure verursachen einen Speicherverlust ("memory leak"), da die alten Struktur-Objekte nicht freigegeben werden (ClearStructure muss aufgerufen werden, bevor InitializeStructure ein weiteres Mal aufgerufen wird).
Ich verstehe diese Aussage nicht so ganz, bedeutet das nun dass generell immer ein memory leak nach dem Aufruf von InitializeStructure() auftritt oder nur wenn man vor dem Aufruf von InitializeStructure() kein ClearStructure() verwendet hat ?

Gruß
Armin

Re: Frage zu InitializeStructure()

Verfasst: 10.05.2015 22:50
von STARGÅTE
Der zweite Teil trifft zu.
Fred hat geschrieben:BTW, the clear is not done automatically, because we don't assume than the new memory area is filled with zeros. If you use AllocateMemory() with the #PB_Memory_NoClear flag, you can still call InitializeStructure() right after. If we called ClearStructure here, it will crash if some memory fields are array, list or map as the pointers will be garbage.
http://www.purebasic.fr/english/viewtop ... 09#p440009
InitializeStructure() legt also nur die neuen Objekte an, guckt aber nicht nach alten, die ggf. gelöscht werden müssen.
Daher ist der Aufruf von ClearStructure() selbst zu erledigen (Vorraussetzung ist natürlich, dass der Memory auch korrekt initialisiert wurde.)

Re: Frage zu InitializeStructure()

Verfasst: 10.05.2015 22:51
von NicTheQuick
Nur dann, wenn du es zwei mal nacheinander aufrufst, ohne vorher ClearStructure() aufgerufen zu haben.

Re: Frage zu InitializeStructure()

Verfasst: 10.05.2015 22:54
von captain_hesse
Ahh Ok

Vielen Dank :allright: