In a blog post, I argue that you should always refrain from allocating memory blocks larger than PTRDIFF_MAX (*), because doing so will make compilers such as Clang and GCC generate nonsensical code even if you do not subtract pointers to that block in a way that causes the result to overflow.

(*) Even if malloc succeeds when you pass it a value larger than PTRDIFF_MAX . The crux of the problem is that GCC and Clang only generate code that behaves correctly when linked with such a malloc , but Glibc provides a malloc function that does not implement this limitation.

If you follow that constraint (which I encourage you to: that's the message of the blog post), then both types are equally correct.