[Dune] const Referenzen ausliefern

Peter Bastian Peter.Bastian at iwr.uni-heidelberg.de
Tue Oct 18 15:31:17 CEST 2005


Hallo ihr,

ich musste heute auf die harte Tour lernen, dass const Referenzen
ausliefern echt blöd ist. In meinem Fehlerschätzer habe ich mir aus
Effizienzgründen eine Referenz auf die (nun transponierte) Jacobimatrix
gemerkt:

const Dune::FieldMatrix<DT,n,n>& nbjac =
it.outside()->geometry().jacobianInverseTransposed(nblocal);

Das funktionierte in sgrid und yaspgrid wunderbar. Klar, denn dort sitzt
der Speicher für die Jacobimatrix im IntersectionIterator. In UGGrid und
AlbertaGrid ist das aber leider anders, dort wird in der Methode
outside() ein EntityPointer und in diesem eine Geometry angelegt, die
referenz ausgeliefert und dann der EntityPointer wieder weggeschmissen.
Die Referenz auf Speicher irgendwo im Stack lebt weiter und die Matrix
wird später dann überschrieben. Heraus kommt Mist in der Numerik aber
kein Segfault. Sowas ist echt dumm.

Wollen wir nicht die Sache mit den Referenzen ausliefern nochmal überdenken?

Grüße

-- Peter
------------------------------------------------------------------
Peter Bastian, IWR,Uni Heidelberg, INF 348,R 020, 69120 Heidelberg
email: Peter.Bastian at iwr.uni-heidelberg.de   Tel: +49 6221 54 4984
WWW: http://www.iwr.uni-heidelberg.de/~Peter.Bastian Fax: ... 8860





More information about the Dune mailing list