私はCでArrayListの実装をしています。ArrayListはポインタ(void *)を格納します。つまり、ArrayListはポインタの動的配列です。ここで私はArrayListのから要素を削除する方法:動的配列から要素を削除するときにmemmoveの後で再割り当てする必要はありますか?
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
はそれを行いますreallocをする必要がありますか?
注: 'void *'型にポインタ演算を適用することはできません。 – BLUEPIXY
@BLUEPIXYどのようにオフセットでポインタを取得するのですか?ポインターの配列( 'void **')? –
GCCの拡張機能を使用しても問題ありません。通常は 'char *'にキャストされます。 sizeof(void *)* size(void *)* indexを使用する場合は、 'void ** p = malloc(size * sizeof(void *)) '; – BLUEPIXY