|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Palermo
Messaggi: 596
|
[fortran]funzioni modificano indici del ciclo iterativo
Premetto che il problema in esame è uguale per qualunque linguaggio!
Attualmente sono nella fase di debug, uso visual studio 2008, la parte che non va è un ciclo iterativo: do i=1, margine(j) { funzione 1 funzione 2 call C06EKF(1,Temp2, In_Vect, D, IFAIL) assegnamento1.. . . } end do "margine" è un vettore di interi, in questo caso il ciclo deve concludersi quando "i" raggiunge il valore "margine(j)". Naturalmente j entra nei limiti del vettore. J ad esempio è 1 e quindi margine(1) è uguale ad esempio a 5 quindi, 5 iterazioni da fare. Il problema sta nel fatto che le funzioni all'interno del ciclo modificano i valori del vettore "margine", e dopo un pò il programma va in crash. Se tutto funzionasse il programma dovrebbe fare circa 5 iterazioni. Ho controllato e ricontrollato la funzione1 e funzione2 non fanno assolutamente riferimento al vettore margine, eppure ho visto con i miei occhi che quando esco da quella funzione i valori del vettore margine sono cambiati. Per farvi capire la funzione1 è del tipo funzione1(par1, par2) { int i, j; successiva elaborazione su par1 e par2; return par1; } Nella fase di debug controllando tutte le istruzioni una alla volta, dopo il return ho visto che i valori del vettore "margine" sono tutti cambiati più o meno in questo modo: margine(1) = 43534 margine(2) = 322 margine(3) = 323 . . e così via Che si fa in questi casi? Quale strategia posso usare per capire cosa non va? p.s. L'istruzione "call C06EKF(1,Temp2, In_Vect, D, IFAIL)" è una chiamata ad una libreria esterna la quale modifica solamente i suoi parametri.
__________________
Athlon II X2 240e 45watt, MB gigabyte nForce 720d, 4 giga ram ddr2 800mhz, ati 5750 1giga ram ddr5, ssd intel x25-m 80giga 2° gen. + ssd OCZ 60 giga, dual boot Windows xp sp3 e Windows seven ultimate 64 bit. Sistema raffreddamento attivo 3 ventole noctua ultralow voltage. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:02.



















