delete und delete[]



  • #include <set> 
    #include <iostream> 
    using namespace std; 
    
    class X;  
    set<X*> setX;  
    set<X*>::iterator pos; 
    
    class X
    {
    public:
      unsigned getNum() const {return refCount;}
    
      X() 
      {
          inc();
          setX.insert(this);
          cout << "ctor" << " " << refCount << endl;
      }
    
      ~X()
      { 
          dec();
          setX.erase(this); 
          cout << "dtor" << " " << refCount << endl;
      }  
    
    private:  
      static unsigned refCount;
      void inc(){refCount++;}
      void dec(){refCount--;}  
    };
    
    unsigned X::refCount = 0;
    
    int main() 
    { 
      unsigned zahl = 0;
      X* px = new X[20];
    
      for( pos = setX.begin(); pos != setX.end(); ++pos) 
      { 
          zahl++; 
          cout << zahl << " " << *pos << " " << (*pos)->getNum() << endl; 
      } 
    
      delete px; // Fehler
    
      zahl = 0;
      for( pos = setX.begin(); pos != setX.end(); ++pos) 
      { 
          zahl++; 
          cout << zahl << " " << *pos << " " << (*pos)->getNum() << endl; 
      } 
    }
    


  • Abgesehen davon, dass du einem einfach den Code hinknallst und nichts weiter dazu schreibst, der Fehler liegt genau da, wo du ihn bereits durch Kommentar gekennzeichnet hast.

    Es muss

    delete[] px
    

    heißen, da du ja auch

    px = new X[20]
    

    schreibst.

    Habe den Code aber nur überflogen, kann sein, dass noch mehr Fehler darin enthalten sind.

    Caipi



  • Habe den Code aber nur überflogen, kann sein, dass noch mehr Fehler darin enthalten sind.

    😕 😉



  • Wenn man für den unfreundlichsten und unaussagekräftigsten Thread Punkte verteilen könnte, wäre dieser in meine Gunst ganz weit vorne. 🕶



  • delete löscht Zeiger auf Objekte
    delete[] löscht Zeiger auf Arrays (bzw. gibt den Speicher des Arrays frei)


Anmelden zum Antworten