在英特尔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()
感谢您的时间
答案 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函数访问不可访问的数组地址后,触发了断点。