我正在尝试为具有灵活数组成员的结构编写分配函数。我将其实现如下:
int ns_request_character(char *char_out){
//returns 0 on success, -1 on error
}
struct ns_fam{
size_t size;
char data[];
};
struct ns_fam * ns_allocate(size_t size){
char data[size];
for(size_t i = 0; i < size; i++){
char char_out;
if(ns_request_character(&char_out) == -1){
return NULL;
}
data[i] = char_out;
}
struct ns_fam *ns_fam = malloc(sizeof(*ns_fam) + sizeof(char[size]));
if(ns_fam){
ns_fam->size = size;
memcpy(ns_fam->data, data, sizeof(data)); // <-- ???
}
return ns_fam;
}
我不确定的事情是将堆栈可变长度数组的内存复制到灵活数组成员。我这样做是为了避免在free
返回ns_request_character
的情况下处理结构的-1
。