0

我正在用 valgrind 调试 Fortran 90 程序。我在跟踪中遇到错误

==93929== Use of uninitialised value of size 4
==93929==    at 0x7C3D4B: for__add_to_lf_table 
==93929==    by 0x8014A8: for__open_proc.
==93929==    by 0x7C7B0F: for__open_default 
==93929==    by 0x7F3648: for_write_seq_lis 
<rest of my application backtrace>

而且我不明白这是我的错误还是仅仅是内部库的怪癖。我想知道这些功能的作用以及任何其他相关信息。

我在 macosx 上使用 ifort (IFORT) 11.1 20100806、valgrind 3.6.0 进行编译。

编辑:当使用内在函数时,我能够发现 valgrind 错误的发生associated(ptr),或者何时print *使用。无论如何,我只是想知道这些例程负责什么。什么是 lf 表?

4

1 回答 1

0

我的猜测是名称开头的符号for_ 是在程序使用的运行时库中定义的,可能是英特尔编译器提供的。我希望你自己想出来 Stefano。他们所做的事情是晦涩难懂的,除了显而易见的:实现 Fortran 的各种操作。

你做了什么来追踪导致 valgrind 抱怨你使用了未初始化的值的错误的根源?您是否尝试使用该选项进行编译-check uninit?您是否在代码上尝试过英特尔源代码检查器?

编辑:啊哈。Fortran 的特点之一是在它被声明和它第一次与目标关联的时间之间,指针没有关联状态。它既不关联也不不关联,调用 ASSOCIATED 可能会产生奇怪的结果;根据标准,例如,它们不应返回.true..false.。这可能是您的问题的根源,尽管您报告的其他症状并非如此。

于 2010-12-14T17:42:34.627 回答