Löschen von 2D Array
-
Hallo zusammen!
Folgendes:
Es wird definiert/initialisiert:
bool **table; table = new bool* [columns.size()]; for(unsigned int i=0;i<columns.size();i++) { table[i] = new bool[staterows.size()+transrows.size()]; }An eine Funktion übergeben:
fix_close_complete( &staterows, &transrows, &columns, alpha, &table, stream);In dieser Versuche ich den Speicherbereich von table freizugeben:
for(...;...;...) { delete [] (*table)[ju]; } delete [] (*table);Allerdings bekomme ich beim delete in der Schleife ein
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));Schonmal vorweg, am Methodenaufruf etc. kann ich nichts ändern. Ich möchte nur den Speicher freigeben.
Wie bitte
?Danke für alle Antworten!
-
Gibt es irgendeinen Grund, keinen vector zu benutzen? Nein? Dachte ich mir.
-
Ich würde das auch anders aufziehen, nur leider habe ich von meinem Vorgänger ein main.cpp file mit 2100 Zeilen vorgesetzt bekommen. Ich will nur die memory leaks beseitigen, der Rest ist mir egal...
-
also wenn das so sit wie du es geschrieben hast, dann sieht diese zeile nicht so gut aus
delete [] (*table)[ju];das sollte zu folgendem werden
delete[] table[ju];edit:
andererseits einen 2dim pointer per referenz irgenwie an eine funktion zu übergeben ist schon sehr böse. nimm vector...
-
Im Methodenaufruf wird table aber mit
&tableübergeben. Somit muss ich doch einmal dereferenzieren, oder?
-
curry-king schrieb:
Im Methodenaufruf wird table aber mit
&tableübergeben. Somit muss ich doch einmal dereferenzieren, oder?
Guck dir noch einmal an, was Referenzen sind und wie man sie benutzt.
Aber wenn du Speicherlecks beheben möchtest, dann ist vector doch optimal. Du musst fast nichts umschreiben, außer die ganzen new und delete zu entfernen. Optimalerweise hätte dein Vorgänger einen typedef benutzt für sein Array, dann müsstest du fast gar nichts ändern. Naja, vermutlich nicht, denn wenn er sauber programmieren würde, hätte er das gar nicht erst so gemacht.
-
Skym0sh0 schrieb:
andererseits einen 2dim pointer per referenz irgenwie an eine funktion zu übergeben ist schon sehr böse. nimm vector...
SeppJ schrieb:
... dann ist vector doch optimal.
Leider ist das ganze Programm auf Basis dieses tables geschrieben... Ich habe keine Zeit/Lust, das auf vector umzustellen...
Es geht wirklich nur um diese Stelle, dann sollte der Codefetzen keien Leaks mehr haben.
Wie gesagt, den Methodenaufruf möchte ich nicht ändern, weil das bei ca. 20 anderen Funktionen auch so gemacht wird :-|.
Wie krieg ich den Platz da frei?
Danke für Eure Nerven!
-
naja, aber ein vector ist semantisch equivalent zu einem array
eigentlich müsstes du nur die deklaration ändern, und vielleicht ein paar aufrufe, dann sollte das gehen
-
Wenn es keine andere Möglichkeit gibt, dann bleibt mir wohl nichts anderes übrig...
Gibt es die wirklich nicht?
-
curry-king schrieb:
Wenn es keine andere Möglichkeit gibt, dann bleibt mir wohl nichts anderes übrig...
Gibt es die wirklich nicht?
Doch, wurde dir doch auch schon gesagt.