Нет. Вы можете только free()
полный блок, полученный в результате звонка malloc()
(или одному из друзей malloc()
), но не часть этого блока.
Лучше всего, вероятно, оставить выделенный блок как есть и просто использовать указатель на элемент с индексом один, как если бы это было начало массива (и игнорировать последний элемент).
Использование memcpy
работает, если действительно , которое важно для освобождения двух элементов.
Вы также можете сдвинуть все элементы влево на единицу (т. Е. Переместить элемент с индексом один на индекс ноль и т. Д.), А затем вызвать realloc()
, чтобы изменить размер блока и удалить два последних элемента. Это, на самом деле, не очень хорошая идея, потому что наиболее вероятный результат состоит в том, что либо (а) базовое выделение кучи не будет фактически изменено, и вы переместитесь и не получите никакой выгоды, либо (б) базовое выделение кучи будет изменено, и все будет перемещено во второй раз .