| 
 | 
真是太奇怪了! 
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掉的呢? 
 
 
哎,真是一团浆糊啊!有没有完美的解决之道啊? 
 
 |   
 
 
 
 |