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.