分配的数组太大,会引发如下错误:
0x000007FE083F86C8 (DH0_fortran_DLL.dll) (GccCallfortranDLLexample.exe 中)处有未经处理的异常: 0xC00000FD: Stack overflow (参数: 0x0000000000000001, 0x0000000000033000)。
应该用动态数组:
REAL,ALLOCATABLE :: W2(:),W3(:),W4(:),W5(:),DSP_A(:)
ALLOCATE(W2(MAXFR))
ALLOCATE(W3(MAXFR))
ALLOCATE(W4(MAXFR))
ALLOCATE(W5(MAXFR))
ALLOCATE(DSP_A(MAXFR))
DO I=1,MAXFR
DSP_A(I)=DSP1(I)
END DO
在subroutine调用的时候,应该给方法写上interface
SUBROUTINE ESCG1(NITR,EITR)
C
IMPLICIT NONE
PARAMETER(MAXND=80000,MAXFR=MAXND*3)
C
interface
subroutine AXMLT1(aaa,bbb)
real, intent(inout) :: aaa(:), bbb(:)
end subroutine AXMLT1
end interface
C
C
COMMON/EQUA/DSP1(MAXFR)
REAL,ALLOCATABLE :: W2(:),W3(:),W4(:),W5(:),DSP_A(:)
ALLOCATE(W2(MAXFR))
ALLOCATE(W3(MAXFR))
ALLOCATE(W4(MAXFR))
ALLOCATE(W5(MAXFR))
ALLOCATE(DSP_A(MAXFR))
DO I=1,MAXFR
DSP_A(I)=DSP1(I)
END DO
CALL AXMLT1(DSP_A,W2)
RETURN
END
原本的方法改为这样:
SUBROUTINE AXMLT1(X,Z)
C
IMPLICIT REAL*8(A-Z)
real,allocatable,dimension(:)::X,Z
C
RETURN
END
http://pages.swcp.com/~walt/fortran_store/Html/Info/books/t90_2.html