000
11.04.2006, 16:13 Uhr
Drager
|
hoi,
ich steh grad a weng aufn schlauch, ich hab ne matrix klasse geschrieben, mit beliebiger spalten , zeilen grösse --> dynamischer speicher
so jetzt hab ich aber folgendes problem bei z.b. der addition (von z.b. 2 quadratischen gleichgrossen matrizen):
Code: |
template<class T> inline Matrix<T> Matrix<T>::operator+(Matrix<T>& mat1) {
Matrix<T> buffer(height,width);
for(unsigned int i = 0; i < height; ++i) { for(unsigned int k = 0; k < width; ++k) {
buffer.mat[i][k] = mat[i][k] + mat1.mat[i][k];
} }
return buffer;
}
|
ich benutze also eine buffer um das zwischenergebnis zu speichern, dass problem ist aber das buffer ja eine lokale variable ist.
nun hab ich eigendlich gedacht, dass er erst den inhalt von buffer in den rückgabe wert kopiert und erst dann buffer zerstört, aber anscheinent ist das nicht der fall... (hab mir buffer ausgeben lassen vor return, und den rückgabe wert auch und diese unterscheiden sich, desweitern habe ich auch den "=" operator überladen, dass er auch wirklich den speicher kopiert und net nur die adressen von den zeigern.. also sollte an sich im rückgabewert (bentutz dieser den "=" operator?) auch das richtige stehn)
und da er nun erst den destruktor (freigabe des dynamischen speichers) von buffer aufruft, steht da natürlich nix mehr sinnvolles im rückgabewert drin... jetzt frag ich mich wie ich das sinnvoll machen kann, oder hab ich da irgendwo nen fehler?
danke
Michi Dieser Post wurde am 11.04.2006 um 16:15 Uhr von Drager editiert. |