In quel modo allochi meno memoria del necessario e poi vai a scrivere in aree di memoria che possono essere riservate ad altri scopi con la possibilità di crash.
Quindi la differenza è semplicemente che se la alloco con realloc(tmp, 1 * sizeof(char)) posso causare errori perchè ho allocato in maniera errata la memoria?