I am currently reading Expert C Programmign - Deep C Secrets. On page 164 where the author was explaining Bus Error and Segmentation fault , he showed this line of code
union {
char a[10];
int i;
} u ;
int * p = ( int * ) &(u.a[1]);
*p = 17; /* the misaligned addr in p causes a bus error */
The above code is suppose to trigger a bus error, but when i ran it, it ran fine without any error. The author gave the below explanation
This causes a bus error because the array/int union ensures that character array "a" is also at a reasonably aligned address for an integer, so "a+1" is definitely not. We then try to store 4 bytes into an address that is aligned only for single-byte access. A good compiler will warn about misalignment, but it cannot spot all occurrences.
My understanding of the above statement is that , char is 1 byte and we are trying to place an int which is 4 byte on an index of char a[10] hence a bus error will occur ( am not sure if my understanding is right or wrong )
My question is why is the above code not causing a bus error.
Note: Am not a CS student,simple explanations will help.
Note: A question that looks smiliar to this question have already been asked, but am only specific to the above block of code.