相关疑难解决方法(0)

Fortran中的自动数组释放

我正在使用gfortran -std = f2008.我有一个函数返回包含可分配数组的派生类型.该函数在返回之前调用allocate().似乎数组在分配数组的函数返回后的某个时间被自动释放,并且我的程序会出现段错误.

什么时候自动释放?我应该以不同的方式编码吗?

fortran

6
推荐指数
1
解决办法
2730
查看次数

Fortran 可分配数组在赋值时的内存位置?

假设我有类似的东西:

real, dimension(:), allocatable :: S
integer, dimension(:) :: idx
...
S = S(idx)
Run Code Online (Sandbox Code Playgroud)

whereSidx在分配之前正确分配/初始化。

Fortran 标准对 的内存位置(地址)有S什么说法(如果有的话)?分配后它应该留在同一个地方吗?是否未指定(由编译器决定)?是否有所作为,如果S不是allocatable

完整示例:

$ cat test.f90 
program test
implicit none
real, dimension(:), allocatable :: S
integer :: i, idx(7) = [1,3,5,7,2,4,6]

allocate(S(size(idx)))
do i=1,size(S)
  S(i) = i*i
end do

write(6,*) S
write(6,*) loc(S)

S = S(idx)

write(6,*) S
write(6,*) loc(S)

S(:) = S(idx)

write(6,*) S
write(6,*) loc(S)

deallocate(S)

end program

$ sunf90 -V
f90: …
Run Code Online (Sandbox Code Playgroud)

fortran dynamic-memory-allocation

3
推荐指数
1
解决办法
300
查看次数

标签 统计

fortran ×2

dynamic-memory-allocation ×1