Я пытаюсь написать функцию выделения для структуры с гибким членом массива. Я реализовал это следующим образом:
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
.