在IF Composer 2013上,Fortran格式化的写入功能触发器“已退出代码408(0x198)”

时间:2013-01-29 15:53:21

标签: debugging fortran fortran77 formatted

在英特尔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语句,调试器就会触发断点,并且Call Stack会显示以下系统函数被调用:

的_issue_diagnostics() _for_emit_diagnostics()

感谢您的时间

1 个答案:

答案 0 :(得分:2)

问题是LADATE变量实际上是一个call-by-reference参数(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))
   ...

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