[Dune] Shallow Copy in CompressedBlockVectorWindow

Oliver Sander sander at mi.fu-berlin.de
Wed Mar 15 17:12:07 CET 2006


Hallo Peter!
Ich habe gerade recht lange nach einem Fehler gesucht.  Am Ende
hat es sich herausgestellt, daß der Copy Constructor von
CompressedBlockVectorWindow schuld hatte.  Der implementiert
nämlich nur eine flache Kopie.  Ich hatte folgendes unschuldige
Stückchen Code geschrieben:

BCRSMatrix<...> A,B;

[...]

for (int i=0; i<A.N(); i++) {

     BCRSMatrix<...>::row_type tmp = A[i];  //  (*)
     tmp *= 2;
     B[i] += tmp;
}

Es sollte natürlich B += 2*A dabei herauskommen, aber da dabei in
Zeile (*) keine echte Kopie gemacht wird verhunzt man sich
gleichzeitig A.

Du hast den CopyConstructor ja netterweise mit einer Warnung
versehen, deswegen nehme ich an, die flache Kopie dort hat
einen tieferen Sinn.  Andererseits finde ich es extrem unintuitiv,
daß Code wie der oben nicht funktioniert.  Und man braucht
echt lange, bis man die entsprechenden Fehler gefunden hat.

Kann man die Situation verbessern?

Viele Grüße,
Oliver

************************************************************************
* Oliver Sander                ** email: sander at mi.fu-berlin.de        *
* Freie Universität Berlin     ** phone: + 49 (30) 838 75217           *
* Institut für Mathematik II   ** URL  : page.mi.fu-berlin.de/~sander  *
* Arnimallee 2-6               ** -------------------------------------*
* 14195 Berlin, Germany        ** Member of MATHEON (www.matheon.de)   *
************************************************************************


More information about the Dune mailing list