Verlorengegangen ist er (datentyp) ueberhaupt nicht und Hintergrund fuer die Frage ist folgender: Ich schreib gerade ein paar Funktionen die Arrays mit den Dimensionen 1,2 oder 3 dynamisch allokieren und bin jetzt beim Thema free angelangt. Das wollte ich ganz allegemein loesen und hatte die Idee - "ich uebergebe der funktion den zeiger, diese ruft sich so lange rekursiv auf bis sie die hoechste dimension gefunden hat und gibt dann den speicher nacheinander fuer alle dimensionen frei".
Die beiden groessten Problem sind wohl: - woher weis ich den Datentyp
Den brauchst Du eigentlich nicht. Denn free wird immer ein Zeiger auf void uebergeben. Egal ob Du ein Array von ints oder von floats oder sonstwas freigibts. Entscheidet ist die Speicheradresse, auf die der Zeiger weist. Entsprechend kannst Du auch ein mehr-dimensionales Array, also ein Array von Zeigern, als einzelne void*-Zeiger freigeben. Noetig ist lediglich, die Laenge des Arrays zu wissen. Und da weiss ich keine andere Moeglichkeit, als diese als Parameter zu uebergeben.
- wie organisiere ich die Parameterliste bei deklaration bzw. definition der Funktion (auch hier wieder der Datentyp)
Den Typ halte ich wie erwaehnt fuer egal. Eine allgemeine Freigabe hingegen ist nicht gerade trivial. Du brauchst einen Zeiger auf das Array, die Anzahl der Dimensionen sowie die Anzahl der Elemente fuer jede Dimension. Vielleicht so: void freeArray( void* p, int dimensions, long elementsDim1, long elementsDim2, long elementsDim3 ); oder noch allgemeinermit einem Array fuer die Anzahl der Elemente: void freeArray( void* p, int dimensions, long* elementsPerDimeension ); Rufst Du diese Funktion rekursiv auf und dekrementierst dabei dimensions und inkrementierst elementsPerDimeension, dann koennte IN ETWA das herauskommen, was Du suchst. Probier es mal aus (-: Bye -- 1 Bodo Kaelberer 123 http://www.webkind.de/ 3 4 "A button I have made must be pushed." (ip)