После ptr1 = realloc(ptr2, 3 * sizeof(int));
ptr2 недействителен и не должен использоваться.Вам нужно только бесплатно ptr1
.В некоторых случаях возвращаемое значение realloc
будет тем же значением, которое вы передали.
Вы можете смело считать ptr1=realloc(ptr2, ...
эквивалентным этому:
ptr1 = malloc(...);
memcpy(ptr1, ptr2, ...);
free(ptr2);
Это то, что происходит в большинстве случаев, если новый размер все еще не помещается в старый блок памяти - тогда realloc может вернуть исходный блок памяти.
Как и другие функции выделения, realloc
возвращает NULL, еслине удается - вы можете проверить это.