14.04 上出現分段錯誤,但在 10.04 上並未失敗

14.04 上出現分段錯誤,但在 10.04 上並未失敗

我正在使用 ubuntu 14.04 64 位元 LTS,並且正在用 C 編寫圖像處理程序。
同樣的程式在 10.04 中運作良好。

有什麼幫助嗎?

$ cc -o out.e sub.c -lm
$ ./out.e
Segmentation fault (core dumped)

答案1

實際發生的細節很難說清楚,但我會舉一個例子來說明這個問題。

重要的是該程式在 10.04 上運行,但在 14.0 上失敗。確切的問題可能不同,但相似且相關:

有些事情違反了規則

「分段錯誤」錯誤通常意味著存取了一些不屬於程式的記憶體。可能在10.04和14.04上都存在這樣的非法存取記憶體的情況,但是在10.04上並沒有造成任何問題。

規則執行不嚴格

這意味著它在 10.04 中工作只是偶然;這是很有可能的,因為由於多種原因,程式「官方」記憶體附近的內存在技術上也可能屬於您的程式。
那就是讓編譯器思考更容易,或者透過更規則的記憶體存取使程式更快。
這樣,程式就可以被允許做基於程式文字不允許它做的事情。

公差可以改變

您可以在沒有分段錯誤的情況下存取哪些“非官方”記憶體取決於編譯器版本和庫版本,兩者都已更改。

最簡單、最常見的情況應該是程式中存在記憶體存取太遠的錯誤,例如透過索引中的除一錯誤來存取數組後面的位元組。

概括

該錯誤以前就存在,但無論如何它都有效。
現在,它不起作用,這只是一個導致分段錯誤的正常錯誤。

積極的方面是:當它工作時,由於存在錯誤,它可能會產生錯誤的結果 - 這比您現在看到的崩潰要糟糕得多。


執行規則

調試此類問題的一個好方法是對程式進行檢測,以強制執行正常運行時系統未強制執行的規則。
在查找記憶體存取問題時執行此操作的一種工具是瓦爾格林德man valgrind)。

相關內容