释放分配给数组任意位置的内存

Freeing up memory allocated for an arbitrary position at an array

我正在编写代码来管理对数组元素的插入和删除。我知道链表或其他一些数据结构更适合这个,但我仅限于使用数组。

数组分配的额外内存通过使用 realloc() 函数进行管理。但是,对于删除,我必须释放分配给最后一个元素的内存。为此,我尝试使用 free (a + n)n 表示最后一个元素,但是,这最终导致崩溃,例如:

*** Error in `./a.out': munmap_chunk(): invalid pointer: 
0x000000000158f018 ***
Aborted (core dumped)

我认为崩溃是预料之中的,因为 OS 管理堆的分配列表,而 a 本身是通过 malloc() 分配的,OS 不知道 a + n 的任何分配,导致硬错误。

我应该如何释放存储在数组中的最后一个元素?

使用realloc缩小分配:

array_size--;
array = realloc(array, array_size);