我正在用C编写一个动态数组。
typedef struct __c_array {
void**_elem;
int cur_size;
int capacity;
}c_array;我的界面如下所示:
extern void push_back_c_array ( c_array*, void *);现在,用户必须为要推入数组的元素分配内存。有没有办法使用void *来避免这种情况。
我想用它来做下面的事情
int a = 5;
push_back_c_array ( <ARRAY_PTR>, a );这有没有可能。
发布于 2011-03-31 15:00:09
如果您提供一个push_back_c_array()版本来复制所提供的值,这是可能的。为此,您将需要一个额外的参数,用于指定值的大小:
push_back_c_array(c_array* arr, void* val, unsigned int size);在堆中为新值分配内存,然后执行memcpy。但在此之后,您需要重新分配它。因此,您需要记住哪些值是由您分配的,哪些值是由调用者分配的。相当下流..。所以,如果你这样做了-总是这样做,并在你的函数的文档中描述这个约定。
发布于 2011-03-31 14:58:40
发布于 2011-03-31 14:59:19
在开始时分配一小块内存(可能是用来容纳联合),然后推回元素,直到填满它,这样可能会更好。然后是realloc,或者分配一个两倍大小的数组,然后复制所有内容。
https://stackoverflow.com/questions/5496211
复制相似问题