小编Emi*_*lio的帖子

根据优化级别导致内存泄漏的延迟长度字符变量

我在 Ubuntu 中使用带有延迟长度字符变量的 gfortran 8.4,如下例所示:

PROGRAM test
   IMPLICIT NONE
   CHARACTER(LEN=:),ALLOCATABLE :: str 
   str = '10'
END PROGRAM test
Run Code Online (Sandbox Code Playgroud)

如果我使用以下方法编译它:

gfortran-8 test.f90 -o test -O0
Run Code Online (Sandbox Code Playgroud)

使用 Valgrind 运行程序时,出现内存泄漏:

==29119== HEAP SUMMARY:
==29119==     in use at exit: 2 bytes in 1 blocks
==29119==   total heap usage: 22 allocs, 21 frees, 13,522 bytes allocated
==29119== 
==29119== LEAK SUMMARY:
==29119==    definitely lost: 2 bytes in 1 blocks
==29119==    indirectly lost: 0 bytes in 0 blocks
==29119==      possibly lost: 0 bytes in 0 blocks
==29119== …
Run Code Online (Sandbox Code Playgroud)

fortran memory-leaks gfortran

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

基于返回类型的 Fortran 泛型函数

我试图根据要返回的值在 Fortran 中创建一个通用函数,即取决于函数的输出是分配给单精度实数还是双精度实数。代码是:

\n\n
MODULE kk_M\n\n   USE ISO_FORTRAN_ENV\n\n   IMPLICIT NONE\n\n   INTEGER, PARAMETER :: sp = REAL32\n   INTEGER, PARAMETER :: dp = REAL64\n\n   INTERFACE use_func\n      MODULE PROCEDURE use_sp_func\n      MODULE PROCEDURE use_dp_func\n   END INTERFACE use_func\n\n   INTERFACE use_sub\n      MODULE PROCEDURE use_sp_sub\n      MODULE PROCEDURE use_dp_sub\n   END INTERFACE use_sub\n\n   CONTAINS\n\n   FUNCTION use_sp_func() RESULT(res)\n      REAL(KIND=sp) :: res\n      res = 5._sp\n   END FUNCTION use_sp_func\n\n   FUNCTION use_dp_func() RESULT(res)\n      REAL(KIND=dp) :: res\n      res = 5._dp\n   END FUNCTION use_dp_func\n\n   SUBROUTINE use_sp_sub(res)\n      REAL(KIND=sp), INTENT(OUT) :: res\n      res = 5._sp\n   END SUBROUTINE …
Run Code Online (Sandbox Code Playgroud)

fortran function generic-programming

2
推荐指数
1
解决办法
767
查看次数