我正在编写代码来管理数组元素的插入和删除。我知道链接列表或其他一些数据结构更适合这种情况,但我仅限于使用数组。
使用realloc()
函数管理阵列分配的额外内存。但是,对于删除,我必须释放分配给最后一个元素的内存。为此,我尝试使用代表最后一个元素的free (a + n)
,n
,然而,这最终会导致崩溃,例如:
*** Error in `./a.out': munmap_chunk(): invalid pointer:
0x000000000158f018 ***
Aborted (core dumped)
我认为崩溃是预期的,因为操作系统管理堆的分配列表,而a
本身已经通过malloc()
分配,操作系统不知道任何分配a + n
,导致硬错误。
我应该如何解决存储在数组中的最后一个元素?
答案 0 :(得分:2)
使用realloc
缩小分配:
array_size--;
array = realloc(array, array_size);