[問題] 主程式 call subroutine 會爆掉的原因
編譯後錯誤訊息:
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 <-------在這步會出現錯誤訊息
=======================================
subroutine sub(n1,n2,n3,A)
implict none
integer,intent(in) :: n1,n2,n3
real(8),intent(in) :: A(n1,n2,n3)
end subroutine
副程式本身並無任何作用
所以認為是呼叫副程式時,傳入資料導致主程式記憶體空間出現問題
但不了解傳入整個陣列A 與 部分陣列A(1:511,1:511,1:511)
因為我的理解,subroutine 是傳送記憶體位置,並非傳送值
為何後者會導致錯誤發生,希望有經驗的前輩可以指教,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.22.208
※ 文章網址: https://www.ptt.cc/bbs/Fortran/M.1448273296.A.D92.html
→
11/23 23:23, , 1F
11/23 23:23, 1F
→
11/23 23:24, , 2F
11/23 23:24, 2F
→
11/23 23:25, , 3F
11/23 23:25, 3F
→
11/23 23:25, , 4F
11/23 23:25, 4F
→
11/23 23:26, , 5F
11/23 23:26, 5F
→
11/23 23:26, , 6F
11/23 23:26, 6F
→
11/23 23:26, , 7F
11/23 23:26, 7F
→
11/23 23:27, , 8F
11/23 23:27, 8F
→
11/23 23:28, , 9F
11/23 23:28, 9F
主程式中 A 陣列其實是用 allocate 配置空間的
而 sub 的 A 陣列應該只是告知傳入陣列的大小,不具備配置記憶體功能
不知我的理解是否錯誤?
在我測試例子當中,A陣列非常的大,如果縮小成 256^3 則不會有問題
所以我在猜想是不是 A(1:511,1:511,1:511)傳入副程式時
這種部分陣列會而外再吃記憶體,導致記憶體不足?
※ 編輯: sin55688 (140.113.125.200), 11/24/2015 01:16:17
→
11/24 01:26, , 10F
11/24 01:26, 10F
→
11/24 01:26, , 11F
11/24 01:26, 11F
→
11/24 01:26, , 12F
11/24 01:26, 12F
→
11/24 17:16, , 13F
11/24 17:16, 13F
推
11/26 21:01, , 14F
11/26 21:01, 14F
→
12/12 22:41, , 15F
12/12 22:41, 15F
→
12/12 22:41, , 16F
12/12 22:41, 16F
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章