SIGSEGV與SIGBUS
SIGBUS(Bus error)意味着指針所對應的地址是有效地址,但總線不能正常使用該指針。通常是未對齊的數據訪問所致。
SIGSEGV(Segment fault)意味着指針所對應的地址是無效地址,沒有物理內存對應該地址。
SEGV_MAPERR, 地址沒有映射到對象,可能的原因是dangling pointer或者overflow,
比如
1. ptr1和ptr2指向同一段內存,但是某個線程某個時刻用ptr1將內存delete了,如果因為錯誤的設計或者假設導致認為ptr2還是指向合法的內存,使用時就會出錯;
2. 某個數組有1個元素,但是傳入的數組大小卻是2,如果我們要用2作為長度來遍歷這個數組,那當訪問第二個元素時就會出錯;
