释放为阵列中的任意位置分配的内存

时间:2015-07-17 03:48:13

标签: c arrays pointers memory-management dynamic-memory-allocation

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

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

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

我认为崩溃是预期的,因为操作系统管理堆的分配列表,而a本身已经通过malloc()分配,操作系统不知道任何分配a + n,导致硬错误。

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

1 个答案:

答案 0 :(得分:2)

使用realloc缩小分配:

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