От человека realloc: функция realloc() возвращает указатель на вновь выделенную память, которая соответствующим образом выровнена для любой переменной, а может быть отличной от ptr, или NULL, если запрос не выполняется.
Итак, в этом фрагменте кода:
ptr=(int*)malloc(sizeof(int));
ptr1=(int*)realloc(ptr,count*sizeof(int));
if(ptr1==NULL) //reallocated pointer ptr1
{
printf("\nExiting!!");
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
}
Достаточно ли предположить, что перераспределенный указатель указывает на другой блок memeory, а не на тот же самый блок. Если предположение становится ложным и realloc возвращает адрес исходного блока памяти, на который указывает ptr, а затем свободный (ptr) выполняется (по причине, приведенной в комментариях), тогда блок памяти будет удален, и программа будет сходить с ума. Должен ли я включить другое условие, которое будет сравнивать равенство ptr и ptr1 и исключить выполнение оператора free (ptr)?