Fortran开发人员可以做的所有可能的内存错误是什么?

时间:2013-03-14 12:28:27

标签: memory fortran

对于C / C ++,我可以很好地了解可能导致内存泄漏,内存损坏等的用例... 但是Fortran呢?

2 个答案:

答案 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编译器检测,并提供信息性消息。运行时下标检查将检测写入数组的不存在元素。如果你创建接口你的子例程显式编译器,在编译时,将检测调用和过程中的参数之间的不匹配。最简单的方法是将过程(子程序和函数)放入模块中并使用这些模块。