0

構造体プレーヤーの動的配列を作成したいと思います。私は構造体のサイズを知っているので、各構造体にメモリを割り当てたくありません。だから私は定義します

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;
}

エラー: このアプリケーションは、異常な方法で終了するようランタイムに要求しました。詳細については、アプリケーションのサポート チームにお問い合わせください。

メモリをどのように割り当てる必要がありますか?

UPDATE ヘッダー: stdio.h、stdint.h、inttypes.h、stdlib.h

gcc (rev2、MinGW-builds プロジェクトによって構築) 4.8.0 Copyright (C) 2013 Free Software Foundation, Inc. これはフリー ソフトウェアです。条件のコピーについてはソースを参照してください。保証はありません。商品性や特定の目的への適合性のためでさえありません。

4

1 に答える 1

-1

エラーは何ですか?

あなたの構造体定義エラーではstruct player data[]; 、それはあるべきかstruct player* data;、または書くべきですdata[100]

于 2013-10-29T06:29:13.637 に答える