Будет ли работать функция free()
если я динамически выделяю массив, а затем передаю не исходный указатель, а указатель на середину массива? Пример:
int* array = malloc(10 * sizeof *array); if(array) { array += 5; // adjusting the indicies free(array); }
Или мне нужно установить указатель обратно в начало массива перед вызовом free()
?
Точно нет. Значение, переданное free()
должно быть точно таким же значением, возвращаемым malloc()
. На самом деле, чтобы убедиться, что это так, я бы рекомендовал вам использовать копию указателя, если вам нужен указатель, который вы можете увеличить или иным образом изменить.
(И «Да», вам нужно «установить его обратно».)
API требует, чтобы вы только перешли на free()
именно то, что вы получили от malloc
() 1 .
1. Или нулевой указатель.