对于C / C ++,我可以很好地了解可能导致内存泄漏,内存损坏等的用例... 但是Fortran呢?
答案 0 :(得分:1)
我会说,指针分配绝对是在Fortran中创建内存泄漏的一种方式(可能是唯一明显的方法):
program test
implicit none
integer :: ii
integer, pointer :: leak(:)
do ii = 1, 10000000
allocate(leak(1000))
leak(:) = 0
end do
end program test
答案 1 :(得分:0)
正如另一个答案所述,您可以使用指针导致内存泄漏。
导致内存损坏的方法有两种。您可以写入不存在的数组元素:
real :: a (100)
a (101) = 3.0
您还可以调用子程序,使调用中的参数与实际子例程中的参数不匹配。有很多方法可以做到这一点。
内存损坏可能很糟糕,因为症状可能在错误发生很久之后变得可见,或者因为它导致无信息错误(例如,“分段错误”)。使用现代Fortran,正确编码以及使用编译器提供的完整错误检查选项,我提到的两种方法将由Fortran编译器检测,并提供信息性消息。运行时下标检查将检测写入数组的不存在元素。如果你创建接口你的子例程显式编译器,在编译时,将检测调用和过程中的参数之间的不匹配。最简单的方法是将过程(子程序和函数)放入模块中并使用这些模块。