Ergebnis 1 bis 2 von 2

Thema: Heapfreigabe

  1. #1
    Unregistriert
    Gast

    Standard Heapfreigabe

    Habe eine Klasse Matrix geschrieben, die folgendermaßen aussieht:

    Code:
    class CZeile 
    { 
    protected: 
    
    double *z; int size;
    public:
    ~CZeile(void) {delete [] this->z}; CZeile(int s){this->size = s; this->z = new double[s];}
    } class CMatrix:public CZeile { protected:
    CZeile **mat; //Zeiger auf "Zeilen"-Vektor int lines, cols; //Zeilen- und Spaltenzahl
    public:
    ~CMatrix(void) {
    for (int i = 0; i < this->lines; i++) {
    delete this->mat[i];
    }
    delete[] this->mat;
    }
    CMatrix(int z, int s, double wert) {
    this->lines = z; this->cols = s; this->mat = new CZeile*[this->lines]; //Vektor fuer Zeiger auf Zeilenvektoren int i, j; for (i = 0; i < this->lines; i++) //Zeilenvektoren: {
    this->mat[i] = new CZeile(this->cols); //Speicher reservieren
    for (j = 0; j < this->cols; ++j) {
    (*this)[i][j] = wert; //und Werte kopieren
    }
    }
    }
    }
    Soweit so gut, Matrix anlegen und damit arbeiten funktioniert alles, aber wenn ich im Debugmodus das Programm beenden möchte und den Destruktor aufrufe, kommt folgende Fehlermeldung:

    Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffff9.
    Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffff9.
    Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffffa.
    Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffffa.
    Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffffb.
    Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffffb.
    HEAP[test21.exe]: Invalid Address specified to RtlFreeHeap( 00030000, 7C958FB7 )
    Unbehandelte Ausnahme bei 0x7c91120e in test21.exe: Benutzerhaltepunkt.
    Das Programm "[2496] test21.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.

    Habe schon herausgefunden, dass die Adresse 7C958FB7 das Element mat (also bei delete[] this->mat) ist. Dann wird der Destruktor von CZeile aufgerufen und es knallt.
    Programmier noch nicht so lang, vielleicht kann mir das jemand erklären? Versteh soweit schon, dass ich auf Speicher zugreife, den es offensichtlich nicht mehr gibt, aber wo in meinem Code soll der Fehler liegen?
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Heapfreigabe

    http://www.cplusplus.com/reference/stl/vector/
    http://www.boost.org/doc/libs/1_37_0...tml/array.html

    Wenn du solche High-Level-Typen verwendest, wirst du solche Speicherzugriffsfehler durch Pointer kaum mehr haben.

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •