suffers from the 'hole' problem you pointed out.
has more precise values for AVR micros
However for AVR micros (UNO etc) where the memory is really limited, the malloc/free is a resonable test, because if you are not mixing SafeStrings with Strings (i.e not using any dynamic (malloc/free) calls) there will not be any 'holes' in the heap.
For other micros with larger RAM, there is much less likely to be a problem.