对于 C/C++,我对可能导致内存泄漏、内存损坏等的用例有很好的了解……但是 Fortran 呢?
问问题
309 次
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 回答