我已经编写了由英特尔Fortran编译的商业软件的子程序,因此代码是用Fortran编写的。子程序本身编译没有任何问题,但当我将它链接到主软件时,我得到了一些奇怪的结果。
最有趣和最令人惊讶的事件是:
当我在子例程中放入write
语句时,我得到的结果与其中没有write
语句的结果不同,并且通过更改此语句的位置,结果也会更改。我从未见过write
语句会影响结果。如果有人给我一个想法,我真的很感激吗?
答案 0 :(得分:3)
这是典型的未定义行为,反映了其他地方的错误。这可以是任何东西,比如损坏的堆栈,超出内存访问等等......
使用调试选项,绑定检查等进行编译的时间,并试试调试器。
假设您使用的是Linux,请尝试添加" -g -O0 -check all"到您的编译器命令行选项。这可以在运行时报告有趣的信息。
还尝试使用gdb运行代码,并在崩溃时使用bt
检查调用堆栈。