2011-11-12 24 views
1

所以我有一個項目,我一直在編譯蘋果darwin11-llvm-g ++ - 4.2編譯器。該項目將在RedHat linux上使用GCC 4.4.5進行編譯,但運行時會出現一些非常奇怪的事情。沒有運行時錯誤,但程序輸出完全不同。RedHat上GCC 4.4.5的運行時問題,但在Apple llvm 4.2上正常工作?

我對GDB非常糟糕,所以我需要在今晚的午夜之前將這個項目提交給學校。任何人都可能會提出一些可能會導致這個問題的東西嗎?也許這兩個編譯器之間的某些已知的差異可能會讓我看到某個地方?

我意識到這是非常模糊的,我正在學習使用gdb,所以我可以弄清楚發生了什麼。

+1

您是否收到編譯器警告? – Pubby

+3

如果程序輸出不相同,那麼很可能是您濫用了該語言並導致了未定義的行爲。這在編譯器中是不太可能的。你在使用之前是否初始化了所有變量?你是否在界限內正確地分配和使用內存?函數中的變量是否已初始化爲默認值? –

+0

都是64位版本嗎?你有沒有嘗試過靜態分析儀? –

回答

1

爲了解決這個問題,我通過@AdrianCornish建議清單去。

「如果程序的輸出是不一樣,那麼它很可能,你是濫用語言並引起未定義的行爲是不太可能是編譯器的差異,你是否在使用之前初始化了所有的變量?你是否正確地在內存中分配和使用內存?函數中的變量是否初始化爲默認值? - 阿德里安康沃爾

通過這個我發現有一個整數變量,我忘記了在我的構造函數中初始化爲零。顯然,llvm會自動初始化變量爲零,而gcc不會。

+0

很高興你發現它:-) –

1

正如@weezbizzle發現的 - 編譯器的行爲不同,一個默認值初始化成員變量。

相關問題