根據維基百科頁面Segmentation fault,總線錯誤可能由未對齊的內存訪問引起。本文舉例說明如何觸發總線錯誤。在這個例子中,我們必須啓用對齊檢查來查看總線錯誤。如果我們禁用這種對齊檢查會怎樣?未對齊的內存訪問總是會導致總線錯誤?
該程序似乎正常工作。我有一個程序頻繁地訪問未對齊的內存,並且它被很多人使用,但沒有人向我報告總線錯誤或其他奇怪的結果。如果我們禁用對齊檢查,未對齊內存的副作用是什麼?
平臺:我在x86/x86-64上工作。我也通過在Mac上編譯「gcc -arch ppc」來試用我的程序,並且它正常工作。
什麼是平臺,您正在使用? – 2009-09-30 08:51:30
Pavel Minaev很大程度上回答了我的問題。我正在x86/x86_64上工作。我在Mac上通過編譯「gcc -arch ppc」來試用我的程序,它可以正常工作。 – user172818 2009-09-30 09:01:53
請注意,根據C標準,未對齊的內存訪問(實際上,即使只是指針賦值)也是未定義的行爲 - 因此如果您這樣做(即使並非所有編譯器都會採用這種自由度),兼容的編譯器可以執行任何操作。 – sleske 2015-01-28 23:04:51