置頂
主程式 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 是傳送記憶體位置,並非傳送值
為何後者會導致錯誤發生,希望有經驗的前輩可以指教,謝謝
會員登入
(先登入會員才能回覆留言喔!)
