Рассмотрим код ниже:
#include < stdio.h >
#include < stdlib.h >
#define SIZE 10
int main() {
int * p, i;
p = malloc(SIZE * sizeof(int));
if (p == NULL) {
printf("malloc failed.\n");
return 1;
}
for (i = 0; i < SIZE; i++)
* (p + i) = i * i;
for (i = 0; i < SIZE; i++)
printf("%d\n", * p++);
free(p);
return 0;
}
Этот код не работает. Однако я не уверен, почему. Мой профессор дал объяснение, которое не имеет большого смысла для меня. Предположительно, функция free
не работает.
Из того, что я понимаю, вы можете освободить только указатели, которые были созданы с помощью malloc. И здесь мы модифицируем этот указатель перед его отправкой на освобождение, тем самым делая наше утверждение недействительным.
Это правильный способ критиковать этот код?