找回密码
 注册
Simdroid-非首页
查看: 586|回复: 14

[3. Fortran] 【求助】在子程序定义数组并赋值出错

[复制链接]
发表于 2003-5-20 15:29:48 | 显示全部楼层 |阅读模式 来自 黑龙江哈尔滨
主程序定义了 PARAMETER NZ=100
经过 PROGRAM MAIN 传到 SUB1, 再传到SUB2
  
在SUB2中定义数组 A(4*NZ,4*NZ)
DIMENSION A(4*NZ,4*NZ)
DOUBLE PRECISION A

并赋值为0
DO I=1, 4*NZ
      DO J=1,4*NZ
            A(I,J)=0.0
      END DO
END DO

发现赋值过程中A的某一个元素就会突然溢出数值为XX.XXE+203
  
这怎么回事?有没有别的办法来定义并赋值
发表于 2003-5-20 17:38:54 | 显示全部楼层 来自 北京

回复: 【求助】在子程序定义数组并赋值出错

Simdroid开发平台
苍山负雪 wrote:
主程序定义了 PARAMETER NZ=100
经过 PROGRAM MAIN 传到 SUB1, 再传到SUB2
  
在SUB2中定义数组 A(4*NZ,4*NZ)
DIMENSION A(4*NZ,4*NZ)
DOUBLE PRECISION A

并赋值为0
DO I=1, 4*NZ
      DO J=1,4*NZ
            A(I,J)=0.0
      END DO
END DO

发现赋值过程中A的某一个元素就会突然溢出数值为XX.XXE+203
  
这怎么回事?有没有别的办法来定义并赋值

  
老哥试试这样
将你原来的
在SUB2中定义数组 A(4*NZ,4*NZ)
改为
在SUB2中定义数组 A(400,400)
我觉得可能是4*nz误差造成的
发表于 2003-5-20 19:17:04 | 显示全部楼层 来自 武汉大学

回复: 【求助】在子程序定义数组并赋值出错

与这位兄台见解相同!不过我觉得,如果前面NZ没有定义为整型(Common),NZ应该不再是整数了。你不妨在循环之前将NZ输出来,看看是否为400。
 楼主| 发表于 2003-5-20 21:42:54 | 显示全部楼层 来自 黑龙江哈尔滨

回复: 【求助】在子程序定义数组并赋值出错

输出NZ=100 没有错误
按照edodo的做法也不行
其实在SUB2中还定义了数组B(4*NZ),给B赋值就一点问题都没有 奇怪了:~)
另外必须定义COMMON吗?
NZ作为参数,经常要改变的,直接把数组大小定为400也不合适吧
发表于 2003-5-21 09:35:48 | 显示全部楼层 来自 北京

回复: 【求助】在子程序定义数组并赋值出错

哈哈!
那就是这样的问题了
因为开的数组太大400*400=160000
是不是会有问题!:)
老哥
你可以试着改改
拆分;)
有必要非要做成400*400么?
要不来个400*200和400*201
哈哈!看看吧!
 楼主| 发表于 2003-5-21 09:46:37 | 显示全部楼层 来自 黑龙江哈尔滨

回复: 【求助】在子程序定义数组并赋值出错

晕倒,我要疯了
试着把NZ改成20,也就是80*80的矩阵,居然也通不过?
见鬼的什么意思萨。
发表于 2003-5-21 10:40:55 | 显示全部楼层 来自 武汉大学

回复: 【求助】在子程序定义数组并赋值出错

见兄台如此见解,本人在机子上尝试了一下,按照给出的程序编译了一番,发现没有什么问题,只是开头与你的有一点不同:PARAMETER (NZ=400),因为在编译时不加括号会出错。现在我也想不通了!!!
发表于 2003-5-21 19:58:26 | 显示全部楼层 来自 北京

回复: 【求助】在子程序定义数组并赋值出错

哈哈!
有鬼了!
大家快来抓鬼呀!
苍山负雪  兄的机器里面有鬼了!
 楼主| 发表于 2003-5-22 18:58:28 | 显示全部楼层 来自 黑龙江哈尔滨

回复: 【求助】在子程序定义数组并赋值出错

俺超级faint,费了半天劲,突然发现有一步子程序里把A定义成一维的了。手误手误~~
  
编译的时候也没有提示出来,白白耗费了俺一天时间
发表于 2003-5-22 19:02:37 | 显示全部楼层 来自 北京

回复: 【求助】在子程序定义数组并赋值出错

哈哈哈!!
  
老哥那我们找乐!
哈哈!
开个玩笑
 楼主| 发表于 2003-5-22 19:08:56 | 显示全部楼层 来自 黑龙江哈尔滨

回复: 【求助】在子程序定义数组并赋值出错

:I 还是谢谢 edodo兄和chenyq兄
发表于 2003-5-22 19:15:01 | 显示全部楼层 来自 北京

回复: 【求助】在子程序定义数组并赋值出错

客气
发表于 2003-8-29 08:08:44 | 显示全部楼层 来自 福建福州

回复: 【求助】在子程序定义数组并赋值出错

有VC中应该如何定义呢?
发表于 2011-4-28 22:19:40 | 显示全部楼层 来自 美国
1# 苍山负雪
苍山负雪:
I have a same problem as you had. Do you mind taking a look?

I have a very simple program like the following. When I run this code under Visual Studio 2008 with Intel Fortran 11, it reports error of stack overflow.  If I define array m as "integer m(512, 512)" but not "integer m(k(1),k(2))", the code works well. My system is Windows XP 32, and RAM is 1GB. It should not be the problem of memory. In addition, I had tried to change k(1) and k(2) to 500 but not 512 in main program. And the code works well too. I am so confused!


program test

IMPLICIT REAL(A-H, O-Z)

integer k(2)
common /index/ k

k(1) = 512
k(2) = 512

call dary

end program test

subroutine dary

IMPLICIT REAL(A-H, O-Z)
integer k(2)
common /index/ k

integer m(k(1),k(2))

m(1,1) = 2
write(*,*) m(1,1)

end subroutine dary
回复 不支持

使用道具 举报

发表于 2011-4-29 01:44:20 | 显示全部楼层 来自 美国
I already fixed the problem. Thanks!
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-1 11:37 , Processed in 0.071603 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表