Вы используете *array
в качестве условия, что означает, что цикл for
должен продолжаться, пока *array
не станет ложным, что только если *array == 0
.Вы фактически вызываете неопределенное поведение, потому что вы выделяете array
с помощью malloc
и пытаетесь разыменовать указатель, когда базовые данные могут быть чем угодно, так как блок данных был неинициализирован.
Вам все еще нужен какой-то типсчетчика для цикла, в этом случае вы выделили n
элементов.
/* I'm using a C99 construct by declaring variables in the for initializer */
for (int i = 0; i < n; ++i)
{
/* In your original code you re-assign your counter 'n', don't do that otherwise you lost the size of your array! */
int temp;
printf("Store: \n");
scanf("%d", &temp)
array[i] = temp;
}
/* This is your second loop which prints the items */
for (int i = 0; i < n; ++i)
{
printf("%d\n", array[i]);
}
Кроме того, не манипулируйте указателем array
, не сохраняя его копию. Вы можете использовать free
только для указателя, возвращенного malloc
.
Использование индексов - это то же самое, что манипулирование указателем, в противном случае ваш профессор будет смешным.