Frage zu InitializeStructure()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Frage zu InitializeStructure()

Beitrag 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
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Frage zu InitializeStructure()

Beitrag 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.)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Frage zu InitializeStructure()

Beitrag von NicTheQuick »

Nur dann, wenn du es zwei mal nacheinander aufrufst, ohne vorher ClearStructure() aufgerufen zu haben.
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: Frage zu InitializeStructure()

Beitrag von captain_hesse »

Ahh Ok

Vielen Dank :allright:
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Antworten