sizeof() is not an issue if you use ->next as recommended above, however, here are some details:
1) sizeof() is returning the number of bytes you used (4 + 15 + 4 + 4) = 27,
but the compiler rounds up to a multiple of 3, 8, 16, or 32, depending on options.
You can expect the compiler (and malloc()) to reserve an arbitrary number of bytes (zero or more) than you requested.
2) You cannot assume that multiple calls to malloc() return equally-spaced pointers. You must treat each allocated block as if it was randomly located relative to the other blocks.