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


Anmelden zum Antworten