Imagine the memory as a sequence of pages. Some are available to your process, some are unavailable due to permissions and some are simply inaccessible, i.e. not mapped in. Consider this map (not to scale):
+ + +
| Page, 4096 bytes | |
+-----------------+------+ |
| | | |
| | | |
| | | |
+-----------------+------+-->v
3890B 206B X <-- Not mapped, can't touch!
If you allocate 206 bytes it all depends where in the page those 206 bytes will lie.
If they lie at the start (to the left) accessing more is OK as far as Linux is concerned (but still undefined behavior as far as C is concerned)
If however accessing more bytes spills into another page, with a different protection or into one that's not mapped in, Linux will not be amused and you'll get a segfault
So you're at the mercy of something you can't control: where malloc
will allocate your data, i.e. where the additional 50 bytes will be.