SwapList(List())

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag 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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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Ä?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

@Kaeru
Du hattest wie immer die richtige Idee... :lol:

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
HeX0R
Beiträge: 3054
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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 ?
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Scarabol hat geschrieben:@Kaeru
Du hattest wie immer die richtige Idee... :lol:
Naja, .... dafür dass 2 Posts darüber bereits das gleiche Vorgehen beschrieben wurde war's nicht schlecht. :mrgreen:
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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

PureLust hat geschrieben:Naja, .... dafür dass 2 Posts darüber bereits das gleiche Vorgehen beschrieben wurde war's nicht schlecht. :mrgreen:
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... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
:wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

eigentlich logisch, oder?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten