Some character encoding standard that isn't EBCDIC. Seems to be in
widespread use. Picked as a common but arbitrary example.
Because it's causing the segfault.
There is nothing in C that would prevent 'a' from having
the value 0x00B00001 (imagine the upper 16 bits contains the flags,
isupper, isgraphic, isalnum, and the lower 16 bits containing the
relative offset of characters that meet that flag combination).
There is nothing in C that would prevent 0x00B00001 from being a valid
int-aligned address -- int addresses do not -have- to be even
(e.g., sizeof(char) == sizeof(int)). So the real problem could be,
for example, that 'a' happens to correspond to an address in a segment
owned by the user but with an execute-only attribute.
Even if ASCII did happen to be the character set in use, 97 could
be a valid int address, especially on machines that automatically
trap unaligned fetches and transparently rerun them a byte at a time.
So although your answer might have been correct about what happened
on the OP's machine, it isn't -exactly- the right answer in terms of C.