Hallo zusammen,
ich versuche gerade zwei gleiche Objekte durch die Überladung von dem Plus-Operator miteinander zu addieren.
Dabei erzeuge ich innerhalb der Überladung ein locales Objekt, welches dann die addierten Wert in sich speichert und dann gebe ich dieses locale Objekt zurück.
Das funktioniert soweit, allerdings springt das Programm nach der Rückgabe in den Destructor und will dieses locale Objekt wieder zerstören...,
Überladung:
der Konstruktor (dynamisches Erzeugen von zweidimensionalen Array):
Nach der Rückgabe springt er in den Destructor und will den mTmp zerstören:
Wie kann ich das Problem lösen`?
Vielleicht liegt das Problem am Destructor, da das zerstören von globalen Objekten keine Fehler verursacht
Nachtrag:
Ich habe schon an mehreren Stellen gesehen, dass dieser Destructor korrekt ist.
mit der Zeile:
std::cout << *(daten);
kriege ich auch den tatsächlichen Wert, nur das wieder Freigeben funktioniert nicht, wenn es sich um dieses local-angelegtes Objekt handelt, aber bei globalen funktioniert das.
Die Fehlermeldung beim debuggen ist ein SIGABRT Signal.
Hat wohl was mit dem Speicherzugriff zutun, aber ich verstehe nicht, warum ich nicht den Speicher freigeben kann, wenn ich den Wert davon auslesen kann....
Danke
ich versuche gerade zwei gleiche Objekte durch die Überladung von dem Plus-Operator miteinander zu addieren.
Dabei erzeuge ich innerhalb der Überladung ein locales Objekt, welches dann die addierten Wert in sich speichert und dann gebe ich dieses locale Objekt zurück.
Das funktioniert soweit, allerdings springt das Programm nach der Rückgabe in den Destructor und will dieses locale Objekt wieder zerstören...,
Überladung:
C++:
Obj Obj::operator +(const Obj& m) const{
Obj mTmp(m.columnCount,m.rowCount);
for (int i = 0; i < this->rowCount; i++) {
for (int y = 0; y < this->columnCount; y++) {
std::cout << this->daten[i][y] << "\n";
mTmp.daten[i][y] = this->daten[i][y] + m.daten[i][y];
}
}
return mTmp;
}
der Konstruktor (dynamisches Erzeugen von zweidimensionalen Array):
C++:
Obj::Obj(int reihen, int spalten) {
rowCount = reihen;
columnCount = spalten;
daten = new double*[reihen];
for (int i = 0; i < reihen; i++) {
daten[i] = new double[spalten];
}
}
Nach der Rückgabe springt er in den Destructor und will den mTmp zerstören:
C++:
Obj::~Obj() {
for (int i = 0; i < this->rowCount; i++) {
delete[] this->daten[i];
}
delete[] daten;
}
Wie kann ich das Problem lösen`?
Vielleicht liegt das Problem am Destructor, da das zerstören von globalen Objekten keine Fehler verursacht
Nachtrag:
Ich habe schon an mehreren Stellen gesehen, dass dieser Destructor korrekt ist.
mit der Zeile:
std::cout << *(daten);
kriege ich auch den tatsächlichen Wert, nur das wieder Freigeben funktioniert nicht, wenn es sich um dieses local-angelegtes Objekt handelt, aber bei globalen funktioniert das.
Die Fehlermeldung beim debuggen ist ein SIGABRT Signal.
Hat wohl was mit dem Speicherzugriff zutun, aber ich verstehe nicht, warum ich nicht den Speicher freigeben kann, wenn ich den Wert davon auslesen kann....
Danke
Zuletzt bearbeitet: