От man realloc: функция realloc () возвращает указатель на вновь выделенную память, которая соответствующим образом выровнена для любого типа переменной и может отличаться от ptr или NULL, если запрос не выполняется.
Итак, в этом фрагменте кода:
ptr = (int *) malloc(sizeof(int));
ptr1 = (int *) realloc(ptr, count * sizeof(int));
if(ptr1 == NULL){ //reallocated pointer ptr1
printf("Exiting!!\n");
free(ptr);
exit(0);
}else{
free(ptr); //to deallocate the previous memory block pointed by ptr so as not to leave orphaned blocks of memory when ptr=ptr1 executes and ptr moves on to another block
ptr = ptr1; //deallocation using free has been done assuming that ptr and ptr1 do not point to the same address
}
Достаточно ли просто предположить, что перераспределенный указатель указывает на другой блок памяти, а не на тот же блок, потому что, если предположение становится ложным, и realloc возвращает адрес исходного блока памяти, на который указывает ptr, а затем свободный (ptr) выполняется (по причине, указанной в комментариях), тогда блок памяти будет удален, и программа сойдет с ума. Должен ли я поставить другое условие, которое будет сравнивать равенство ptr и ptr1 и исключать выполнение оператора free (ptr)?