2010-12-14 139 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