That second assert in task 5 is unusual looking, but correct. The more natural looking assertion, assert(n + start < NUM_BITS)
is incorrect.
When it crashes, it should look like this (although file names and line numbers may differ).
a.out: bit_fields.c:27: void crash_me(unsigned int, unsigned int): Assertion `n < NUM_BITS - start' failed.
Aborted (core dumped)