作者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