Eine Möglichkeit wäre, das erste Element des Arrays im Falle eines Fehlers auf NULL zu setzen. Damit könntest du Fehler in der Funktion entsprechend erkennen.
Aber warum allokierst du immer 2 Byte, obwohl du nur eins brauchst?
Code:
zString =(char *) malloc(2*sizeof (char));
zString[0] = '\0';
zString = (char*)realloc(zString,strlen(zString)+ 2* sizeof (char));
strncat(zString,zeichen,1);
greetz
Mike