> What is bus error?
Bus error occurs when hardware tells the OS about a problematic memory
reference. In practice, a bus error is almost always caused by a
misaligned read or write. It's called a bus error, because the address
bus is the component that chokes if a misaligned load or store is
requested.
Alignment means that data items can only be stored at an address that
is multiple of their size.
A program to cause a bus error is:
union {
char a[10];
int i;
}u;
int *p = (int*) &(u.a[1]);
*p = 17; /* the misaligned addr is p causes a bus error */
A bus error can also be generated by referencing memory that does
not physically exist.
Simply, a bus error means that the CPU disliked something about
that memory reference, while segv means that the MMU disliked
something about it.