2010-12-14 140 views
0

我正在用valgrind调试一个Fortran 90程序。我得到错误有这在跟踪for_write_seq_lis做什么?

==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> 

而且我不明白,如果这是我的错误,或只是内部库的怪癖。我想知道这些功能的作用以及其他相关信息。

我正在编译ifort(IFORT)11.1 20100806,macosx上的valgrind 3.6.0。

编辑:当使用associated(ptr)本征值或使用print *时,我能够发现valgrind错误的发生。无论如何,我只是想知道这些例程是由谁负责的。什么是表格?

回答

0

我的猜测是名称开头为for_的符号是在程序使用的运行库中定义的,可能是由Intel编译器提供的。我希望你为自己Stefano想出了这一点。除了显而易见的以外,他们所做的是晦涩难懂的:执行Fortran的各种操作。

你做了什么来追查错误的起源,这使得valgrind抱怨你使用了未初始化的值?您是否尝试使用选项-check uninit进行编译?你有没有试过代码上的英特尔源代码检查器?

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

+0

不幸的是,我不知道问题是什么。该代码适用于小案例,但只要我增加了大小,我就会收到'6591 Illegal instruction'错误。我的所有调试选项都处于活动状态,并且在小型案例中运行时不会收到任何错误消息。我目前正在寻找使其蓬勃发展的转折点。 – 2010-12-14 18:00:30