000
29.09.2006, 20:35 Uhr
~grimmel
Gast
|
Hallo,
ich habe ein seltsames verhalten in meinem array. Nur bei gewissen eingaben verändern sich ein paar anfangswerte im array nach dem aufruf einer fortran bibliotheksfunktion. Wenn ich aber vor deren aufruf einfach speicher alloziiere und dann wieder freigebe passt alles. Ist das ein Beweis dafür dass ein speicherüberlauf stattfindet?
Hier mal mein code:
C++: |
//Dies ist der vector der sich verändert std::vector< double > M; loop--------------------------------------------------
//Aufruf einer Insert funktion siehe unten //p_col = [1,0,0,1] z.B und e_k_hat = [4,3,0,0] als Beispiel Insert(M, p_col, e_k_hat); //Hier hat M jetzt einträge //Es folgt ein Aufruf einer Fortran Funktion fortranf_ (SIDE, TRANS, &m, &n, &k, &A_hat[0], &lda, &tau[0], &e_k_hat[0], &lda, &work[0], &lwork, &info); und hier hat M ein paar werte anders... //Kopierfunktion: void MyClass::Insert(std::vector< double >& M, const std::vector< double >& p_col, const std::vector< double >& e_k_hat) { std::vector< double >::const_iterator el = e_k_hat.begin(); for( std::vector< double >::const_iterator i = p_col.begin(); i != p_col.end(); ++i ) { if( *i != 0.0 ) M.push_back(*el++); else M.push_back(0.0); } }
|
wenn ich einfach VOR den ganzen block das hier presse:
C++: |
for(int t = 0; t < 100; t++) M.push_back(t); M.clear();
|
dann ist vor UND Nach dem fortran aufruf M identisch. Ohne den Block gibt es unterschiede - dies aber Immer nur in der ersten iteration (alles befindet sich in einer schleife)...
z.B so:
Code: |
0.0549 0 0 0.3244 wird zu 0.0523 0.1607 0 0.3244
|
|