[問題] 主程式 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