C.动态结构数组

时间:2013-10-29 06:25:01

标签: c arrays struct dynamic-allocation calloc

我想创建struct player的动态数组。我知道struct的大小,所以我不想为每个struct分配内存。所以我定义了

struct player
{
    uint32_t efficiency ;
    uint32_t number;
} ;

struct array
{
    size_t   size;
    struct player data[];
};

但是在创建并填充数组并尝试读取数据后,我收到错误

static inline size_t sizeof_array(size_t size)
{
    return sizeof(struct array) + (size * sizeof(struct player));
}

struct array *create_array(size_t size)
{
    struct array *ret = calloc(1, sizeof_array(size));
    if (! ret)
        abort();
    ret->size = size;
    return ret;
}

void free_array(struct array *array)
{
    free(array);
}

int main()
{
    size_t size;
    scanf("%d",&size);
    struct array *players = create_array(size);

    for(size_t i = 0; i < size; ++i){
        players -> data[i].efficiency = i; //some data
        players -> data[i].number = i;     //some data
    }

    for(size_t i = 0; i < size; ++i){
        printf("%d) %d\n", players -> data[i].number,players -> data[i].efficiency);
    }

    free_array(players);
    return 0;
}

错误: 此应用程序已请求Runtime以不寻常的方式终止它。 请联系应用程序的支持团队以获取更多信息。

我应该如何分配内存?

更新 headers:stdio.h,stdint.h,inttypes.h,stdlib.h

gcc(rev2,由MinGW-builds项目构建)4.8.0 版权所有(C)2013 Free Software Foundation,Inc。 这是免费软件;查看复制条件的来源。没有 保证;甚至不适用于适销性或特定用途的适用性。

1 个答案:

答案 0 :(得分:-1)

错误是什么?

在您的结构定义中,错误为struct player data[];,应为struct player* data;或写data[100]