将内存复制到灵活阵列成员

时间:2019-04-28 09:21:53

标签: c dynamic-memory-allocation flexible-array-member

我正在尝试为具有灵活数组成员的结构编写分配函数。我将其实现如下:

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

0 个答案:

没有答案