我想創建一個結構播放器的動態數組。我知道結構的大小,所以我不想爲每個結構分配內存。所以我定義C.動態結構陣列
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(轉2,由MinGW的,建立項目生成)4.8.0 版權所有(C)2013免費Software Foundation,Inc. 這是免費軟件;請參閱複製條件的來源。有沒有 保修;甚至不適用於適銷性或針對特定用途的適用性。
你能發佈的錯誤? –
適合我,當我編譯它與海灣合作委員會4.8.1,也許有一些其他的代碼,你沒有顯示?頭文件#include stdio.h inttypes.h malloc.h? –
'scanf(「%d」,&size);'。不知道是不是這個問題,但是你應該使用''%d''作爲'size_t'數據類型。參見http://www.viva64.com/en/k/0023 /。 –