Mehrdimensionales Array freigeben.
-
Hallo,
ich hab mal eine Frage zur Freigabe von Arrays. Wie gebe ich mehrdimensionale Arrays wieder korrekt frei?Ich habe in etwa sowas:
struct tollerTyp** array; int n; // n einlesen.. array = new tollerTyp*[n]; for (int i = 0; i < n; i++) { tollerTyp* t = new tollerTyp; // Dinge mit t machen array[i] = t; }
Wie gebe ich mein array jetzt wieder korrekt frei?
Langt es einfach
delete [] array;
zu machen? Oder muss ich von 0 bis n durchlaufen und alles einzeln freigeben? Oder geht das irgendwie ganz anders? :xmas1:
-
Am Besten legst du gar nicht erst mehrdimensionale Arrays dynamisch an ;).
Aber wenn du es denn mal gemacht hast, dann musst du selbstverständlich jedes einzelne angeforderte Array wieder freigeben. Erst danach kannst du das Übergeordnete löschen.
-
-
template<typename T> void create_2d_array(T**& dest, std::size_t x, std::size_t y) { dest = new T*[x]; for (std::size_t i(0); i < x; ++i) dest[i] = new T[y]; } void delete_2d_array(T**& dest, std::size_t x) { for (std::size_t i(0); i < x; ++i) delete [] dest[i]; delete [] dest; }
...
-
mit std::vector statt normalen arrays musst du dich nichtmehr darum kümmern.
-
Ok Danke
Der Grund warum ich das ohne Vector lösen möchte liegt darin das sich die Array Indizes möglichst nicht ändern sollen wenn man ein Element entfernt (Die Lücke wird später wieder aufgefüllt). Der Link zur Faq hat geholfen *g*mfg xorm