Вы не можете освободить часть массива - вы можете только free()
указатель, полученный из malloc()
, и когда вы это сделаете, вы освободите все запрошенное выделение.
Что касается отрицательных или ненулевых индексов, вы можете делать с указателем все, что захотите, когда вернете его из malloc()
. Например:
int *array = malloc(10 * sizeof(int));
array -= 2;
Создает массив с допустимыми индексами 2-11. Для отрицательных показателей:
int *array = malloc(10 * sizeof(int));
array += 10;
Теперь вы можете получить доступ к этому массиву, например array[-1]
, array[-4]
и т. Д.
Убедитесь, что не обращаетесь к памяти вне вашего массива. Этот тип забавного бизнеса обычно осуждается в программах на С и программистами на Си.