-1

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

4

2 回答 2

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
于 2013-03-14T13:04:08.753 回答
0

正如其他答案所述,您可以使用指针导致内存泄漏。

有两种明显的方式会导致内存损坏。您可以写入不存在的数组元素:

real :: a (100)
a (101) = 3.0

您还可以调用调用中的参数与实际子例程中的参数不匹配的子例程。有很多方法可以做到这一点。

内存损坏可能很糟糕,因为症状可能在错误发生很久之后才变得可见,或者因为它会导致非信息性错误(例如,“分段错误”)。使用现代 Fortran、正确编码和使用编译器提供的完整错误检查选项,我提到的两种方法将被 Fortran 编译器检测到,并提供信息性消息。运行时下标检查将检测对数组不存在元素的写入。如果您使子程序显式接口,编译器将在编译时检测调用和过程中的参数之间的不匹配。最简单的方法是将过程(子例程和函数)放入模块中并使用这些模块。

于 2013-03-14T15:59:49.197 回答