M. *_*tih 6 c memory arrays pointers
我正在研究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*));
}
Run Code Online (Sandbox Code Playgroud)
正如我在代码中评论的那样,我需要重新分配list->ptr
还是memmove
会这样做?
首先:memmove 根本不参与内存分配。它只是做它应该做的事情,移动(可能重叠的)内存部分。
在您的示例中,并非绝对有必要重新分配数组。这主要取决于是否删除了如此多的元素,以至于会有相应数量的可用空间可供重用。如果您认为这确实相关,那么下面的 realloc 语句看起来是正确的。但请记住,如果由于堆碎片问题而仅删除每个数组的几个元素,则未分配的空间可能根本无法使用。