我在 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 中创建一个通用函数,即取决于函数的输出是分配给单精度实数还是双精度实数。代码是:
\n\nMODULE 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)