[问题] 主程式 call subroutine 会爆掉的原因

楼主: sin55688 (单手挑藏獒)   2015-11-23 18:08:13
编译后错误讯息:
forrtl: severe (157): Program Exception - access violation
除错的结果,我认为跟内存使用限制有关,但不清楚原因,想请教板上的前辈
下面是我碰到的情形,我用简单的语法表示
=======================================
程式1 可执行成功
=======================================
real(8) :: A(512,512,512)
A = 1d0
call sub(512,512,512,A)
A = A+A
=======================================
程式2 执行失败
=======================================
real(8) :: A(512,512,512)
A = 1d0
call sub(511,511,511,A(1:511,1:511,1:511)
A = A+A <
作者: noonee (我和烤肉间只差一撮孜然)   2015-11-23 23:23:00
我不知道为何compile 出错 但是就算成功两个也是不一样的啊 懂了 主程式里宣告了A的大小传给sub但是sub里又重新宣告了他的大小 而且大小不一样所以你要传递部份是可以的 但是需要另外写一个叫BB的大小要跟sub里宣告的一样如果你是不想写死array的大小 那就要用allocatable但是用allocatable的话 就只能用module传递事实上这就是为何你去看一堆老程式 老是宣告一个很大的array 然后主副程式都用共一个parameter来宣告大小
作者: rex0707 (我就是我)   2015-11-24 01:26:00
我设A(11,11,11)这样的矩阵大小 两种方法都可以执行如果设成512 会显示内存不足 所以应该是内存不足所造成的问题
作者: blc (Anemos)   2015-11-24 17:16:00
sub里的A阵列内存位置应该跟主程式的一样,所以就……
作者: hiyiyi   2015-11-26 21:01:00
副程式的矩阵宣告用A(:,:,:),自动设定维度大小
作者: crazy10167 (夏日的风味)   2015-12-12 22:41:00
8*512**3使用内存约1G,程式2的方法副程式又再吃1G,你系统如果是32位元就会不够

Links booklink

Contact Us: admin [ a t ] ucptt.com