作者r1000000 (狗屁昭)
看板Fortran
標題[問題] 副程式將值傳出的問題
時間Thu Jul 5 15:04:03 2012
大家好,有個問題想請教各位先進
目前再寫程式的時候遇到了一個問題
在主程式的時候 我有各做一個X Y的迴圈如下
DO III=1,L1/DX+1
X=(III-1)*DX/L1
DO JJJ=1,B1/DY+1
Y=(JJJ-1)*DY/B2
接著會去call一個副程式
CALL STEADY_SOL(W1_S,W2_S,LAMDA,ALPHA,OMEGA1,OMEGA2)
主程式的X,Y迴圈主要是在副程式執行過後才會接著使用副程式傳出的值繼續運算
副程式本身並不會使用到X,Y的變數與值
但是當副程式運算完之後,會自己傳出X,Y的值,將我本來的X,Y值取代成
本來的X,Y 取代過後的值
X=0.0000 → 2.206875623112771E-312
Y=0.0000 → 2.164435707283584E-312
使用副程式時沒有傳入&傳出X,Y,但是他卻自行傳出X,Y的值將我原本的X,Y值給取代掉了
請問有人知道這是甚麼樣的問題嘛?
感謝各位~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.223.119
1F:→ george1224:請問一下 你有在裡面設定x或y的變數嗎? 07/05 21:49
2F:→ george1224:還有要請問一下你是在副程式前後輸出x、y做比較嗎?? 07/05 21:49
3F:推 george1224:好像沒有加到數目 所以用推一下@@ 07/05 21:52
你好,我在主程式跟副程式都沒有宣告X、Y,X、Y主要是作迴圈運算用
以及在最後write出來而已
我並不是要在副程式前後作比較,主要是我要用X、Y的迴圈算不同的解
其中那個副程式是用來算解的係數的,副程式內不會用到X、Y的值,所以我沒傳入
到副程式內,在同一個迴圈內,進到副程式運算前X、Y都是0.0000,但是副程式運算過後
自動把我的X、Y給取代掉了
※ 編輯: r1000000 來自: 118.169.33.131 (07/06 00:10)
4F:推 hiyiyi:你有加implicit none來限定變數一定要宣告嗎? 07/06 12:53
5F:→ hiyiyi:還有可能是溢位的問題 07/06 12:54
你好,我在主程式沒有用implicit none來限定
但是我在副程式內有用implicit none來限定變數宣告才能使用,且我並無宣告X、Y
所以照理說應該是不會用到X、Y才對
如果是溢位的問題的話,需如何改進呢,感謝(winXP+CVF6.6)
※ 編輯: r1000000 來自: 140.113.223.119 (07/06 14:11)
6F:→ Cypresslin:他滿了~就漫出來了~(誤 如果是溢位的話,x y被影響 07/06 15:37
7F:→ Cypresslin:應該就是因為程式存取記憶體到超出該存的範圍,蓋到x y 07/06 15:38
8F:→ Cypresslin:你檢查看看運算時有沒有超出陣列大小之類的 07/06 15:39
你好,不好意思,不太了解程式存取記憶體到超出該存的範圍的意思
意思是說我宣告給陣列的空間不夠大,所以陣列的值超出記憶體存取範圍嗎?
※ 編輯: r1000000 來自: 111.251.203.3 (07/06 21:29)
9F:→ gilocustom:你可以考慮找幾個他牌的編譯器來編譯以先釐清問題是否 07/07 01:12
10F:→ gilocustom:來自編譯器。 07/07 01:12
11F:→ george1224:我猜CY大的意思是有可能是你的記憶體被吃光了 然後就 07/07 23:49
12F:→ george1224:會去取代之前記憶體的位置 造成有這個問題的產生 07/07 23:50
13F:→ george1224:我之前也有試過 最後我是在call之前在設定一次x.y 值 07/07 23:50
14F:→ george1224:你可以try看看@@ 07/07 23:51
15F:→ Cypresslin:或者是宣告real temp(5) 但是去寫入temp(6) 07/09 10:26