Warum wird der Speicher nicht freigegeben?
-
Also die Sache mit Enter funktioniert ...
aber mit +/- nicht ... ich überprüfe das über den Taskmanager/Auslagerungsdatein ...class CTest { public: int *i; CTest() { i = new int[50]; } ~CTest() { delete i; } }; TList *List = new TList; void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key) { if (Key == 13) for (int i = 0; i < 1000000; i++) { int *h = new int[50000]; delete h; } if (Key == '+') for (int i = 0; i < 100000; i++) List->Add( new CTest ); if (Key == '-') { for (int i = 0; i < List->Count; i++) delete (int *)List->Items[i]; List->Clear(); } }Vielen Dank!!!
-
das ist ganz einfach und betrifft die Zeilen 12 und 22:
du hast ein Array mit new erzeugt also mußt du auch ein Array beim delete Löschen, du löscht quasi aber nur ein Element. Verwenden mußt du hier also beidemal delete[] um das komplette Array wieder zu löschen, sieher hierzu auch in der BCB-Hilfe "Der Operator delete für Arrays"
-
Hallo
Außerdem ist das Harte Casten in Zeile 31 mit falsch.
bis bald
akari
-
Der Fehler ist nun behoben ... 1000 Dank an euch 2!
Grüße