"Если ptr равен NULL, функция ведет себя точно так же, как malloc, назначая новый блок байтов размера и возвращая указатель на его начало."
http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/
Кстати, я знаю, что этот код предназначен только для вопроса, но вы всегда должны проверять возвращаемое значение realloc перед обновлением вашего указателя:
int *p,*tmp;
tmp = (int *)realloc(p, nBytes);
if(tmp){
p = tmp;
}
else{
//Out of memory!
}
Если вы этого не сделаете, при сбое realloc вы потеряете ссылку на выделенную память.