【发布时间】:2021-08-31 14:21:51
【问题描述】:
我有这个结构:
typedef struct {
int size;
int capacity;
int element_size;
void* data;
} array;
我有一个函数可以将一个 void ptr 附加到数据中。正如您所看到的,大小每次都会增加,因此数据不会被覆盖。我正在尝试根据数组的当前大小将 data_ptr 复制到数据数组中。但是这个值是不可赋值的。我已经使用 memcpy 进行了这项工作,但我只想复制指针而不是它指向的内容。有什么建议吗?
array alloc_array(int capacity, int element_size) {
void* data_alloc = malloc(capacity * element_size);
return (array) {.size = 0, .capacity = capacity, .element_size = element_size, .data = data_alloc};
}
void append(array* arr, void* data_ptr) {
arr->data + (arr->size * arr->element_size) = data_ptr;
arr->size++;
}
【问题讨论】:
-
我有点困惑。你是说
data指向一个实际数据数组,但你在某处埋有另一个指针? -
假设您的 typedef 执行它在锡上所说的那样,我不知道您为什么认为需要进行任何附加。只需将您的指针分配给
data。如果你想要一个指针数组,那就是void**,而不是void*。 -
but I just want to copy the pointer not what it is pointing to要将指针 value 复制到哪里?element_size是否至少等于sizeof(void*)? -
是的,当您创建数组时,您会传递正在使用的元素的大小。然后使用当前元素的数量按它们的大小,即复制 data_ptr 的位置,然后迭代大小。
-
@Jack Delahunt 您显示的代码没有意义。目前尚不清楚您要做什么。
标签: c memory-management