構造体プレーヤーの動的配列を作成したいと思います。私は構造体のサイズを知っているので、各構造体にメモリを割り当てたくありません。だから私は定義します
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. これはフリー ソフトウェアです。条件のコピーについてはソースを参照してください。保証はありません。商品性や特定の目的への適合性のためでさえありません。