Tôi đang làm việc về triển khai ArrayList trong C. ArrayList lưu trữ con trỏ (void *), điều đó có nghĩa ArrayList là một mảng động của con trỏ. Dưới đây như thế nào để loại bỏ một phần tử từ ArrayList:Tôi có cần realloc sau khi memmove khi loại bỏ một phần tử từ mảng động?
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*));
}
Như tôi đã nhận xét trong mã, tôi cần phải realloc list->ptr
hoặc memmove
sẽ làm điều đó?
lưu ý: Không thể áp dụng số học con trỏ cho loại 'void *'. – BLUEPIXY
@BLUEPIXY Cách lấy con trỏ bằng offset? Có lẽ mảng con trỏ ('void **')? –
Không có vấn đề gì nếu bạn sử dụng phần mở rộng của GCC. Thông thường nó sẽ chuyển sang 'char *'. có, nếu 'void ** p = malloc (kích thước * sizeof (void *)); ' – BLUEPIXY