Objekt-Array löschen
-
Hallo zusammen,
hab da mal ne Frage.
Hab mit delete[] probiert ein Objekt-Arry zu leeren, aber wenn ich einen neuen Datensatz in Array lade stürzt das Programm ab mit einem Adressfehler.
Wie kann ich das Array lerren?
-
mit delete[] leert man nicht, sondern gibt den speicher für das array frei. (wenn es mit new[] angelegt worden ist)
-
Aso. Danke für die Nachhilfe.
Habs jetzt mit
ObjektArray.RemoveAll();gemacht.
Jetzt funzt es.
Diese Funktion löscht aber nur die Pointer. Wenn ich jetzt einen neuen Datensatz in das Array lade, werden die vorhgerigen Einräge überschrieben?
-
Du solltest uns vielleicht mehr verraten.
Von welchem Typ ist ObjectArray? Ist das was aus der MFC?
-
Ja, sorry für die magere Beschreibung.
Also das Array ist vom Typ CObArray und aus MFC.
Dieses Array, nennen wir es m_Schnarrenberger, wird mit new initialisiert und gefüllt mit Daten.
Diese Daten kommen aus einem Textfile. Wenn ich die Daten nicht mehr brauche un Daten aus einem anderen Textfiel laden will, soll m_Schnarrenberger geleert werden.Wie gesagt ich habs mit delete[] gemacht und hatte immerzu einen Adressfehler.
Wenn ich es mit RemoveAll() mache, funzt es zwar, aber das Array ist dann doch nicht leer oder?
-
kann mir bitte bitte jemand helfen?
-
Wenn ich es mit RemoveAll() mache, funzt es zwar, aber das Array ist dann doch nicht leer oder?
Warum überprüfst du das denn nicht selber?
-
Würd ich ja gern aber immer wenn ich auf irgendein Feld zugreif stürzt die Käsefabrik ab.
-
Zeig am besten den *relevanten* Code sonst kommen wir hier nicht weiter.
-
{ TRACE("[Lösche] Gruppe: %s \n", m_GroupName); delete [] m_GroupName; int liCount = m_oaElements.GetSize(); if (liCount) { for (int i = 0; i < liCount; i++) { TRACE("[Lösche] Element: %s \n", m_oaElements[i]); delete m_oaElements[i]; } m_oaElements.RemoveAll(); } }Diese Methode sollte insgesamt 9x aufgerufen werden.
In jeder Gruppe sind verschiedene Anzahl Elemente, die hier gelöscht werden sollen.
Aber sobald ich auf das erste Feld in m_oaElements zugreife stürzt alles ab.
-
mit RemoveAll() leerst du zwar dein Array, aber der Speicher,den du selbst dynamisch belegt hast wird dabei nicht freigegeben, ist also richtig das du das extra per Hand machen musst