Редактировать после обновления: вы дважды освобождаете один и тот же указатель.
free(ptr);
free(p);
Согласно man realloc
: realloc возвращает указатель, переданный в качестве аргумента, поэтому ptr
и p
одинаковы.На самом деле вам здесь не нужны два указателя.
Если вы хотите инициализировать, вместо этого пройдите ptr
или p
, что, как я полагаю, вы пытаетесь сделать тогда:
for(i=0;i<10*sizeof(int);i++)
Вы циклически 10 * sizeof(int)
раз просматриваете массив размером 10, доступ к *(ptr+i)
аналогичен обращению к ptr[i]
, ptr+i
оценивает адрес ptr + sizeof(*p)
, вы можете прочитать об арифметике указателей, если хотитеучить больше.
В вашем случае вы выходите за пределы вашей выделенной памяти, потому что ваш динамически распределенный массив имеет размер 10.