It looks like malloced pointers are aligned to 8 bytes, but alignof(max_align_t) returns 16. This is a violation of the C standard; max_align_t is supposed to reflect the minimum malloc alignment.
This has caused me a great deal of debugging confusion today...