void *x = malloc(...);
void *y = malloc(...);
assert(x != y); // standard guarantees this [1]
Yet it's fairly reasonable that: void *x = malloc(...);
free(x);
void *y = malloc(...); // malloc reused x's allocation here.
So, in effect, guaranteeing that the results of two mallocs can never alias each other, while allowing the implementation to reuse freed memory, requires semantically adjusting the value of a pointer to a unique, unaddressable value.[1] I think, but I'm not sure which versions of C/C++ added this guarantee