|
真是太奇怪了!
1.上面的代码Debug的时候报错,但是Release的时候就运行正常!!!
2.正常情况下,allocate过的数组是不能再allocate的。但是,test_main.f90这样写居然没有报错:
program main
use test_dll
implicit none
integer,allocatable :: iv_int(:)
integer :: iStatus,i
do i=1,10
call allocate_test(iv_int,i)
write(*,*) iv_int
enddo
stop
end program
这意思是说:dll中的allocate不关主程序的事?
3.但是这么写又有问题了:
program main
use test_dll
implicit none
integer,allocatable :: iv_int(:)
integer :: iStatus,i
do i=1,10
call allocate_test(iv_int,i)
write(*,*) iv_int
enddo
allocate(iv_int(8)) ! 到这里报错了,说这是分配过的数组
stop
end program
4.难道确实是分配了,只是只有dll知道分配到哪儿了,主程序不知道?于是又这么改了下:
Dll加上这么一个函数:
subroutine deallocate_test(iv)
!DEC$ ATTRIBUTES STDCALL,REFERENCE,DLLEXPORT,ALIAS:"deallocate_test"::deallocate_test
implicit none
integer,allocatable :: iv(:)
integer :: iStatus
deallocate(iv,stat=iStatus)
return
end subroutine
主程序这么写:
program main
use test_dll
implicit none
integer,allocatable :: iv_int(:)
integer :: iStatus,i
do i=1,10
call allocate_test(iv_int,i)
write(*,*) iv_int
enddo
call deallocate_test(iv_int)
allocate(iv_int(8))
deallocate(iv_int,stat=iStatus)
stop
end program
这么就一切正常了。
5.那回到1,Release的时候主程序又是如何知道dll分配的地址,成功的deallocate掉的呢?
哎,真是一团浆糊啊!有没有完美的解决之道啊?
|
|