Next: , Up: Aliasing   [Contents][Index]


B.1 Aliasing and Alignment

In order for a type-converted pointer to be valid, it must have the alignment that the new pointer type requires. For instance, on most computers, int has alignment 4; the address of an int must be a multiple of 4. However, char has alignment 1, so the address of a char is usually not a multiple of 4. Taking the address of such a char and casting it to int * probably results in an invalid pointer. Trying to dereference it may cause a SIGBUS signal, depending on the platform in use (see Signals).

foo ()
{
  char i[4];
  int *p = (int *) &i[1]; /* Misaligned pointer! */
  return *p;              /* Crash! */
}

This requirement is never a problem when casting the return value of malloc because that function always returns a pointer with as much alignment as any type can require.