Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Probleme bei C++ mit new und delete

  1. #1
    Registrierter Benutzer Avatar von Sym
    Registriert seit
    05.09.2002
    Ort
    Bremen
    Beiträge
    278

    Probleme bei C++ mit new und delete

    Hi,

    ich habe folgendes Problem: Ich habe ein double-Array wie folgt angelegt:
    Code:
    if(_dim && _bandWidth) {
    	_matrix = new (double*)[2*_bandWidth+1];
    	for(unsigned int i=0; i<2*_bandWidth+1; i++) {
    		_matrix[i] = new double[_dim];
    		for(unsigned int j=0; j<_dim; j++)
    			_matrix[i][j] = 0.0;
    	}
    }
    Im Destruktor steht folgendes:
    Code:
    for(unsigned int i=0; i<2*_bandWidth+1; i++)
    	delete [] _matrix[i] ;
    delete [] _matrix;
    doch immer wenn ich das im Destruktor stehen habe, bekomme ich folgende Meldung(en):
    Code:
    *** malloc[4223]: Deallocation of a pointer not malloced: 0x20; This could be a double free(), or free() called with the middle of an allocated block; Try setting environment variable MallocHelp to see tools to help debug
    Woran kann das liegen? Woanders gebe ich den Speicher nicht frei.
    Denk mal drüber nach...

    Lars

    ACHTUNG: ersetze Linux durch GNU/Linux an den entsprechenden Stellen
    www.macuser.de, MSVC2005 Express und Qt, Qt/Mac installieren

  2. #2
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    ich weiß zwar nicht wie die definition von _matrix aussieht, aber ich glaube dass diese zeile:
    Code:
    delete [] _matrix;
    überflüssig ist, da es ziemlich sicher ein normal definierter pointer ist und du den nicht freigeben musst/kannst

    greetz

  3. #3
    Registrierter Benutzer Avatar von Sym
    Registriert seit
    05.09.2002
    Ort
    Bremen
    Beiträge
    278
    Zitat Zitat von quinte17
    ich weiß zwar nicht wie die definition von _matrix aussieht, aber ich glaube dass diese zeile:
    Code:
    delete [] _matrix;
    überflüssig ist, da es ziemlich sicher ein normal definierter pointer ist und du den nicht freigeben musst/kannst

    greetz
    Hi,

    erst einmal danke für Deine Antwort. Es ist so definiert:
    Code:
    double ** _matrix;
    Ich denke, da braucht man das schon. Und selbst wenn ich die Zeile weglassen würde, kommen die Fehler.
    Denk mal drüber nach...

    Lars

    ACHTUNG: ersetze Linux durch GNU/Linux an den entsprechenden Stellen
    www.macuser.de, MSVC2005 Express und Qt, Qt/Mac installieren

  4. #4
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Entferne erstmal die () Klammern in der zweiten Zeile um double*, die sind da falsch.
    Ansonsten sieht es gut aus.
    Machst du zwischen drin einen Fehler, also bekommst du auch die Meldung, wenn du nur Konstruktor und Destruktor aufrufst?

  5. #5
    Registrierter Benutzer Avatar von Sym
    Registriert seit
    05.09.2002
    Ort
    Bremen
    Beiträge
    278
    Zitat Zitat von wraith
    Entferne erstmal die () Klammern in der zweiten Zeile um double*, die sind da falsch.
    Ansonsten sieht es gut aus.
    Machst du zwischen drin einen Fehler, also bekommst du auch die Meldung, wenn du nur Konstruktor und Destruktor aufrufst?
    Ok, die Klammern sind da weg. Wenn ich den Konstruktor aufrufe und anschließend mein Objekt zerstöre, kommt kein Fehler. Aber ich wüsste nicht, was da Probleme geben könnte. Ich verändere die Feltgröße nirgends. Schreibe lediglich Werte direkt in die Referenzen der matrix.
    Denk mal drüber nach...

    Lars

    ACHTUNG: ersetze Linux durch GNU/Linux an den entsprechenden Stellen
    www.macuser.de, MSVC2005 Express und Qt, Qt/Mac installieren

  6. #6
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Zitat Zitat von Sym
    Wenn ich den Konstruktor aufrufe und anschließend mein Objekt zerstöre, kommt kein Fehler. Aber ich wüsste nicht, was da Probleme geben könnte. Ich verändere die Feltgröße nirgends. Schreibe lediglich Werte direkt in die Referenzen der matrix.
    O.k. wenn der Fehler nicht mehr auftritt, wenn du nur Konstruktor und Destruktor aufrufst, dann grenzt das den Fehler schon mal ein.
    Wahrscheinlich schreibst du über die Grenzen der Matrix hinaus, also prüfe nochmal deine Indices.
    Oder du setzt irgendwo den matrix Zeiger unwissentlich auf einen anderen Wert.

  7. #7
    Registrierter Benutzer Avatar von Sym
    Registriert seit
    05.09.2002
    Ort
    Bremen
    Beiträge
    278
    Hallo,

    nochmals danke. Ich habe den Fehler gefunden. Der Copy-Konstruktor war fehlerhaft. Jetzt funktioniert es wunderbar.
    Denk mal drüber nach...

    Lars

    ACHTUNG: ersetze Linux durch GNU/Linux an den entsprechenden Stellen
    www.macuser.de, MSVC2005 Express und Qt, Qt/Mac installieren

Lesezeichen

Berechtigungen

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