Первый вопрос
С помощью !*arr[i]
вы проверяете логическое значение, содержащееся в *arr[i]
, которое может иметь случайное значение, прежде чем присваивать ему значение.В вашем случае значение, содержащееся в *arr[i]
, равно 0, вызывая условие !*arr[i]
.
. Правильный способ проверки, если realoc()
был успешным, - это возврат его возвращаемого значения.Если он нулевой, запрос не выполнен.В вашем случае это будет замена
if(!*arr[i])
на
if(!*arr)
Второй вопрос
В этой строке*arr[++i]=INT_MIN;
оператор index [] имеет приоритет над оператором указателя *.Вы должны написать круглые скобки:
(*arr)[++i]=INT_MIN;
А также здесь
scanf("%d", arr[i]);
вы говорите, что arr
является массивом, когда это указатель на массив.Вы должны заменить его на:
scanf("%d", *arr + i);
Третий вопрос
Вы также делаете free()
перед тем, как получить доступ к значениям в массиве, что вызывает ошибку.Вы должны удалить вызовы free()
в конце input()
и display()
и оставить только один конец main()
.
Вам все еще нужно заменить printf()
на дисплее на
printf("\n%d", (*arr)[i]));