Speicherfreigabe bei verschachtelten Konstrukten?
-
das Blöde ist, dass du N Funktion brauchst.
Oder nur eine mit void* und die Zeiger casten.
-
supertux schrieb:
Eine Lösung wäre der Einsatz von einem Garbage Collector wie Hans Boehms GC zu verwenden
mit so'nem stokelkram würde ich gar nicht erst anfangen.
^^man könnte z.b. eine verkettet liste bemühen, also eine funktion schreiben 'my_linked_malloc()', die alle blöcke in eine liste einträgt. wenn man dann alles wieder loswerden will, könnte man 'ne funktion aufrufen, die alle einträge der liste 'free'd'.
-
fricky schrieb:
mit so'nem stokelkram würde ich gar nicht erst anfangen.
Ich hab mir auch etwas in der Art gedacht.
Wenn wir einen GC wollten, würden wir doch nicht C nehmen, oder?oder muss ich wirklich händisch den gesamten Baum hinuntersteigen und alles von Hand erledigen?
Sollte aber sehr einfach sein, wenn man nicht aus Prinzip alle Rekursion verweigert.
So wie ich das verstanden habe, könntest du dir auch frickys Liste sparen.
Such mal nach "tree traversal".
-
Das Problem an der Sache ist, es ist zwar von der Struktur her ein Baum, aber so ziemlich jeder Knoten in diesem "Baum" ist ein anderer Typ (unterschiedliche structs).
-
Das Problem an der Sache ist, es ist zwar von der Struktur her ein Baum, aber so ziemlich jeder Knoten in diesem "Baum" ist ein anderer Typ (unterschiedliche structs).
Ich persönlich finde das unpraktisch.
Für meine Programme würde ich einen generischen Typ verwenden, der irgendeine
Information über den Typ der Kinder speichert.
Überleg dir mal, ob es nicht einfacher geht.Thus spake the master programmer:
``When the program is being tested, it is too late to make design changes.''
-
Wie gesagt, ich kanns leider nicht ändern, da die Struktur nicht von mir kommt, sondern von einer Bibliothek. Mir gefällt das auch nicht
-
Hatte ich übersehen.
Mach's wie es fricky vorgeschlagen hat, das ist ganz einfach und effektiv.
-
OK, Lösung gefunden und sie ist auch noch super easy
Die Bibliothek von der die Strukturen kommt, stellt auch Methoden zur Verfügung den Speicher wieder frei zu geben.
EDIT: Aber trotzdem vielen Dank für eure Lösungsvorschäge!
-
RTFM
-
bgdnoy schrieb:
das Blöde ist, dass du N Funktion brauchst.
Oder nur eine mit void* und die Zeiger casten.
das würde aber nur gehen, wenn alle structs der Form
struct XXX { struct YYY *node; };
sind. Wenn aber alle so geschrieben sind, dann kann man sich alle structs sparen und gleich
void *node
deklarieren. Also bestehen die structs nicht nur aus 'node', damit müsste man zwangsläufig für jeden Structs eine Free Funktion haben. Und das scheint auch die Bibliothek zu machen.