請原諒我沒有提供任何代碼,但是很難將C + P作爲摘錄,因爲錯誤是隨機產生的。EXC_BAD_ACCESS在使用GCC進行編譯時,Clang的工作原理是
我在編譯C源代碼時遇到了一個非常奇怪的錯誤。我正在爲Erlang開發一個鏈接驅動程序,我不明白是什麼導致了錯誤。錯誤是這樣的:
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0xffffffffb012aae8
[Switching to process 7316 thread 0x1503]
ktqk_exec (query=0x13e0af00, table=0x13e00ea0) at ktqk.c:215
215 clock_t start = clock();
我正在運行用GDB包裝的Erlang虛擬機,所以我可以訪問內存部分。對我來說,高地址0xffffffffb012aae8
看起來很可疑。然而,Clang的一切都按預期工作,沒有錯誤,沒有段錯誤。我試圖調查:
(gdb) p clock
$1 = {<text variable, no debug info>} 0x7fff85c29fd0 <clock>
(gdb) p start
$2 = 2954013712
所以這個值顯然沒有初始化,它之前崩潰了。當我在同一個文件中設置斷點時,它們被簡單地跳過。爲什麼一切與Clang一起工作,但與GCC無關?
由於Clang默認使用C99和GCC C89,因此我必須在GCC上包含-std=c99
標誌進行編譯。可能這是一個潛在的來源?但是,當我註釋掉上面的代碼時,它在下次函數調用時失敗。所以它似乎與函數調用有關。儘管如此,在這條線之前的所有函數調用都很好。
一個非常奇怪的錯誤。有人有任何想法嗎?對不起,這個模糊的解釋,我根本不理解錯誤。
一切順利, 馬丁
我投票結束這個,因爲它太本地化了。這個錯誤原來與問題本身中的文本完全無關,只是一個負數組索引。 – unwind
是的,我可以關閉它,抱歉打擾! –