struct S { char c; int i; };
contains a three-byte pad between c
and i
. The contents of pads are
undefined, which means that a byte-by-byte comparison of what should be
identical instances of struct S
may fail due to differences in the bits
stored in the pad.
struct S s1 = { .c = 'a', .i = 10 }, s2 = { .c = 'a', .i = 10 }; assert(0 == memcmp(&s1, &s2, sizeof(struct S))) // may fail.
The problem this causes for hashing is clear: if the hash function includes
the pad bytes as part its computation, s1
and s2
could produce
different hash values, violating the requirement that identical keys produce
identical hash values.