Probleme beim löschen dynamischer Felder mit delete []



  • Hi,
    ich habe mir eine Struktur angelegt, in der ich Daten speichere.

    m_CVVertexList = new CUSTOMVERTEX**[2];
    m_CVVertexList[0] = new CUSTOMVERTEX*[nx];
    for(i=0; i<nx; i++)
      m_CVVertexList[0][i] = new CUSTOMVERTEX[ny];
    

    Bis hierhin geht noch alles gut, ich kann die Daten speichern und damit arbeiten.

    Wenn ich die Struktur jetzt löschen möchte, bekomme ich aber Probleme.

    bool delete_ASC()
    {
      if(Info.asc.is_load)  //Probe ob das Objekt existiert
      {
        for(int i=0; i<Info.asc.nx; i++)
        {
          delete [] m_CVVertexList[0][i];
        }
        delete [] m_CVVertexList[0]; // hier tritt der Fehler auf
    
        Info.asc=info(); //löschen der Informationen des Objektes
        return true;
      }
      else
      return false;
    }
    

    Ich kann mir den Fehler nicht erklären, da wenn ich das Programmstück mal separat teste, tritt er nicht auf.

    Woran könnte das liegen? 🙄



  • Es liegt wahrscheinlich daran, dass du irgendwo über die Array Grenzen hinaus schreibst!



  • Nein das ist es nicht, habe extra nochmal nachgeschaut. 😞

    Mir stellt sich nur die Frage, ob es mit den Referenzen auf einzelne Elemente des Feldes zusammenhängen könnte.
    Ich halte mir noch einige Referenzen auf Bereche des Feldes, die ich nicht lösche, wenn ich das Feld lösche.
    Sollte aber eigentlich kein Problem darstellen oder?



  • Ich hatte erst vor kurzem ein ähnliches Problem. Als ich den Kommentar von KPC gelesen habe, ist mir sofort ein Licht aufgegangen, denn ich habe tatsächlich über die grenzen des Arrays geschrieben (und das gleich nach der Erstellung des Arrays 🙄).

    char * buffer = new char[1025];
    buffer[1025] = '\0'; // um ein element drüber
    delete[] buffer; //daher stürzt das programm bei dieser zeile ab
    

    Ich hab mir deinen Code noch nicht genau angesehen, aber ich empfehle dir ihn nochmal zu analysieren..Es kann immer einen unscheinbaren Fehler geben.



  • Hmmm,
    jetzt geht es, ich habe die Referenzen auf die Feldelemente durch Pointer ersetzt und es funktioniert. 😕

    Kann mir das bitte jemand mal erklären.



  • Hallo, I ich brache das ganzes Program (oder selbst-arbeitende code) ob etwas zu sagen.


Anmelden zum Antworten