1

在 Intel Fortran Composer 2013 上执行以下 Fortran 代码时,编译器会在写入函数处触发断点并返回代码 408:

       character*20  date_char
       character*10  LADATE

       ...
       if (date_char(3:3) .EQ. "") date_char(3:3)="0"
       if (date_char(7:7) .EQ. "") date_char(7:7)="0"
       write(LADATE,"(2A2,A4)")
     S date_char(3:4),date_char(7:8),date_char(9:12)

它是一种固定的行长格式,S 代表行继续。

date_char 的值为 ' 29 012013 ' 和 LADATE ' '

一旦到达 write 语句,调试器就会触发断点,并且调用堆栈显示正在调用的以下系统函数:

对于_issue_diagnostics() _for_emit_diagnostics()

感谢您的时间

4

1 回答 1

2

问题是 LADATE 变量实际上是一个按引用调用的参数(FORTRAN77 默认传递约定):

   SUBROUTINE MDATE(LADATE)

   character*20  date_char
   character*10  LADATE
   ...
   write(LADATE,"(2A2,A4)")
 S date_char(3:4),date_char(7:8),date_char(9:12)

   RETURN
   END

它作为参数传递给上面的几个子例程,只是一个 8 个字符的字符串。简而言之,调用相当于:

   ...
   CHARACTER VAR*20
   ...
   CALL MDATE(VAR(10:17))
   ...

程序已启动,但在尝试通过写入函数访问不可访问的数组地址后,触发了断点。

于 2013-01-30T09:19:25.360 回答