Seite 2 von 2
Verfasst: 03.08.2007 20:10
von PureLust
Scarabol hat geschrieben:Ok danke, ich warte, ...
OK ... DONE !!!
Und hätte das Forum nicht gesponnen, hättest Du's auch schon 'ne halbe Stunde früher gehabt.
Scarabol hat geschrieben:..., aber schonmal im Voraus im Beispiel von TS wurde die Struktur ja mit angegeben, ich möchte hierrauf jedoch verzichten und die Procedure universell gestalten.
Genau so ist sie aufgebaut.
Prozedur und alles Weitere:
>HIER<
Gruß, PureLust.
Verfasst: 03.08.2007 20:30
von Kaeru Gaman
hey, wo bleibt meine Ehre?
Kaeru Gaman hat geschrieben:also müßte man wohl beim letzten element anfangen,
dort previus und next vertauschen,
dann NextElement(), womit man beim vorletzten landet,
und so weiter die liste rückwärts durchgehen indem man vorwärts-befehle benutzt.
hä?HÄ?
Verfasst: 04.08.2007 00:56
von Scarabol
@Kaeru
Du hattest wie immer die richtige Idee...
Gruß
Scarabol
Verfasst: 04.08.2007 01:20
von HeX0R
ts-soft hat geschrieben:>> 2. Wird der Speicher der Protected Variablen am Ende der Procedure wieder freigegeben?
Ja, einzige Ausnahme ist AllocateMemory, da wird nur der Zeiger ungültig!!!
Hmm... heisst das ohne ein FreeMemory() würde dieser Speicher bis zum Beenden des Programms reserviert bleiben ?
Also bei mehrmaligem Aufruf der entsprechenden Prozedur, der Speicherverbrauch kontinuierlich steigen ?
Verfasst: 04.08.2007 01:30
von PureLust
Scarabol hat geschrieben:@Kaeru
Du hattest wie immer die richtige Idee...

Naja, .... dafür dass 2 Posts darüber bereits das gleiche Vorgehen beschrieben wurde war's nicht schlecht.
HeX0R hat geschrieben:Hmm... heisst das ohne ein FreeMemory() würde dieser Speicher bis zum Beenden des Programms reserviert bleiben ?
Also bei mehrmaligem Aufruf der entsprechenden Prozedur, der Speicherverbrauch kontinuierlich steigen ?
Natürlich. Speicher der speziell allociert wurde muss auch explizit wieder frei gegeben werden - er ist also nicht an Bereiche wie z.B. eine Prozedur gebunden.
Du kannst den Gültigkeitsbereich von AllocateMemory() im Grunde mit einem
Global vergleichen.
Wenn Du also innerhalb einer Prozedur Speicher allocierst den Du ausserhalb nicht mehr benötigst solltest Du ihn vor dem Rücksprung aus der Prozedur auch wieder frei geben sonst dümpelt er bis zum Ende (und im schlimmsten Fall auch noch darüber hinaus) im System rum.
Verfasst: 04.08.2007 04:31
von Kaeru Gaman
PureLust hat geschrieben:Naja, .... dafür dass 2 Posts darüber bereits das gleiche Vorgehen beschrieben wurde war's nicht schlecht.
erst auf diese aussage hin habe ich mir diesen satz
Tip: Eigentlich sollte ein Umdrehen der LList-Reihenfolge auch schneller zu realisiern sein als durch die von Dir verwendete Methode.
Du bräuchtest im Grunde nur den Start-Zeiger der Liste auf das letzte Element zu setzen und dann bei jedem Element einfach die Prev/Next-Zeiger umzudrehen.
nochmal angesehen - und verstanden, dass er dasselbe meint.
der satz war einfach zu KURZ, um es komplett zu beschreiben...

Verfasst: 04.08.2007 15:25
von ts-soft
HeX0R hat geschrieben:
Hmm... heisst das ohne ein FreeMemory() würde dieser Speicher bis zum Beenden des Programms reserviert bleiben ?
Also bei mehrmaligem Aufruf der entsprechenden Prozedur, der Speicherverbrauch kontinuierlich steigen ?
Code: Alles auswählen
Procedure Foo()
Protected *Mem = AllocateMemory(1000)
ProcedureReturn *Mem
EndProcedure
Dim mem(100)
For i = 0 To 100
mem(i) = Foo()
Next
For i = 0 To 100
Debug MemorySize(mem(i)) ; Speicher existiert noch
Next

Verfasst: 04.08.2007 16:56
von Kaeru Gaman
eigentlich logisch, oder?