gpt4 book ai didi

c - 处理数组中的 free 的简单方法

转载 作者:行者123 更新时间:2023-11-30 19:13:14 25 4
gpt4 key购买 nike

当我有一个获取指针的函数 int *vector 时与一对夫妇int值(value)观。我想删除元素号n 。所以我会使用free()在那个元素上。我现在遇到的问题是我的 int 值数组中有一个“洞”。有没有一种简单的方法可以让我没有这个问题,或者我真的必须创建一个新的 int pinter 并重新排序我的 vector ?

最佳答案

给定这种形式的函数:

void delete_element(int *vector, size_t index) {
// ...
}

对应于vector的实际参数预计是指向一系列一个或多个(隐含:index + 1或更多)连续int的指针 。这可以是普通 int 数组的一部分或全部,也可以是动态分配的 block 。如果是前者,那么您根本无法释放该空间的任何部分。如果是后者,那么您可以释放或重新分配整个空间,而不仅仅是与一个元素关联的部分。

为了避免删除在数组中留下一个洞,您需要将后面的元素向下移动,为此,您需要知道总共有多少个元素。因此,您需要一个信息更丰富的函数签名,也许是这样的:

void delete_element(int *vector, size_t *size, size_t index) {
// ...
}

实际删除可能只涉及使用 memmove() 移动后面的元素(覆盖要删除的元素),然后减小大小。对于后者,请注意,我建议传递一个指向 vector 大小的指针,以便该函数可以修改调用者的副本。

如果您还想缩小分配,那么您需要做更多的工作(涉及调用 realloc(),并将 vector 的修改值传回给调用者),但请注意,在这种情况下,您的函数将无法在普通数组上运行。

关于c - 处理数组中的 free 的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com