[英]Initialize struct with malloc in C
所以我有一個新手問題。 事先對此感到抱歉,因為語法不是英語不是我的主要語言。
所以我必須做一個跳棋游戲。 我有一些結構,定義為
struct game {
int **board;
int xsize, ysize;
struct move *moves;
int cur_player;
};
struct coord {
int x, y;
};
struct move_seq {
struct move_seq *next;
struct coord c_old;
struct coord c_new;
int piece_value;
struct coord piece_taken;
int old_orig;
};
struct move {
struct move *next;
struct move_seq *seq;
};
我必須用功能初始化一個結構游戲
struct game *new_game(int xsize, int ysize)
所以,這是我的問題。 現在,我稱new_game始終將xsize的10和10值設為ysize。 然后,我初始化棋盤游戲,稍后再分配。
int black = 1;
int white = 5;
int **board;
int i;
int j;
int k;
for(i=0;i<xsize;i++)
{
for(j=0;j<ysize;j++)
{
if(i<(xsize/2) && j<(ysize/2) && (i+j)%2!=0)
{
board[i][j] = black;
}
else if(i>(xsize/2) && j>(ysize/2) && (i+j)%2!=0)
{
board[i][j] = white;
}
else board[i][j] = 0;
}
}
struct game *new = malloc (sizeof(struct game *));
if (new == NULL) return NULL;
所以,我的問題是在那之后。 無論我對struct new做什么,我都遇到了Segmentation Fault。
我試圖分配new-> xsize = xsize,並且與ysize相同。 像我學過的那樣,我為板和結構移動執行了一個malloc動作,但是我不斷遇到Segmentation Fault的錯誤。
所以這是我真正的問題:如何正確分配和初始化結構? 我是否必須為struct game的每個成員制作一個malloc? (我也嘗試過,但沒有成功...)
我不一定只想得到答案,我更希望真正了解在這種情況下的工作,總的來說,以減少將來的錯誤。
在此先感謝您的幫助。
祝你有美好的一天。
發生這種情況是因為您只為指向 struct
的指針分配了空間。 您需要做的是為其分配整個大小:
struct game *new = malloc (sizeof(struct game));
編輯:不要被malloc的返回值誤導,因為它返回一個指向分配空間的指針,這就是為什么它應該是struct game *new
的原因。
除了Michael的錯誤修復之外,我還想知道板子:它沒有分配,但您可以寫它。 我認為應該是這樣的:
struct game *new_game(int xsize, int ysize)
{
int black = 1;
int white = 5;
int i;
int j;
struct game *new = malloc (sizeof(struct game));
if (new == NULL) return NULL;
game->xsize= xsize;
game->ysize= ysize;
game->board= malloc(xsize*ysize*sizeof(int));
for(i=0;i<xsize;i++)
{
for(j=0;j<ysize;j++)
{
if(i<(xsize/2) && j<(ysize/2) && (i+j)%2!=0)
{
game->board[i*xsize+j] = black;
}
else if(i>(xsize/2) && j>(ysize/2) && (i+j)%2!=0)
{
game->board[i*xsize+j] = white;
}
else game->board[i*xsize+j] = 0;
}
}
return (game);
}
還要注意數組索引:編譯器不知道動態行大小,因此您必須自己做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.