C free () подпрограммы и указатели на увеличенный массив - PullRequest
6 голосов
/ 24 марта 2011

Сработает ли подпрограмма free(), если я динамически выделю массив и затем передам не начальный указатель, а указатель на середину массива? Пример:

int* array = malloc(10 * sizeof *array);
if(array) {

  array += 5; // adjusting the indicies

  free(array);
}

Или мне нужно установить указатель на начало массива перед вызовом free()?

Ответы [ 2 ]

7 голосов
/ 24 марта 2011

Абсолютно нет.Значение, переданное free(), должно быть точно таким же значением, которое возвращается malloc().На самом деле, чтобы убедиться в этом, я бы порекомендовал вам использовать копию указателя, если вам нужен указатель, который вы можете увеличивать или иным образом изменять.

5 голосов
/ 24 марта 2011

Нет

(И "Да", вам действительно нужно "установить его обратно".)

API требует, чтобы вы только передавали free() именно то, что получили от malloc () 1 .


1.Или нулевой указатель.

...