gpt4 book ai didi

c - 从动态数组中删除元素时,是否需要在 memmove 之后重新分配?

转载 作者:太空狗 更新时间:2023-10-29 17:25:33 26 4
gpt4 key购买 nike

我正在使用 C 实现 ArrayList。ArrayList 存储指针 (void*),这意味着 ArrayList 是指针的动态数组。下面是我如何从 ArrayList 中删除一个元素:

typedef struct
{
void* ptr; // pointer of array (beginning)
int length; // pointer count
}ArrayList;

void ArrayList_Remove(ArrayList *list, int index)
{
memmove(
list->ptr + (sizeof(void*) * index),
list->ptr + (sizeof(void*) * (index + 1)),
(list->length - index) * sizeof(void*)
);
list->length--;
// Do I need to realloc list->ptr to free space?
// list->ptr = realloc(list->ptr, list->length * sizeof(void*));
}

正如我在代码中评论的那样,我需要重新分配 list->ptr 还是 memmove 会这样做?

最佳答案

第一件事:memmove 根本不参与内存分配。它只是做它应该做的事情,移动(可能重叠)部分内存。

在您的示例中,重新分配数组并不是绝对必要的。这主要取决于是否删除了如此多的元素,以便有相关数量的可用空间供重复使用。如果您觉得这确实相关,那么下面的 realloc-statement 看起来是正确的。但请记住,如果由于堆碎片问题,每个数组只删除了几个元素,则未分配的空间可能根本无法使用。

关于c - 从动态数组中删除元素时,是否需要在 memmove 之后重新分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34492046/

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