Итак, у меня есть то, что я думаю, вопрос о нобе. Извините за это заранее, и для грамматики, поскольку английский не является моим основным языком.Инициализировать структуру с помощью malloc в 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 игру Жека в fonction
struct game *new_game(int xsize, int ysize)
Итак, вот моя проблема. Я теперь называю new_game всегда с 10 и 10 значениями для xsize 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;
Итак, моя проблема в этом. У меня просто есть проблема с сегментацией, что бы я ни делал с моей новой структурой.
Я попытался присвоить new-> xsize = xsize и то же самое с ysize. Я делаю malloc для доски и движения структуры, как я научился делать, но я продолжал получать эту ошибку Segmentation Fault.
Итак, вот мой реальный вопрос: как правильно назначить и правильно инициализировать структуру? Должен ли я сделать malloc для каждого из членов структурированной игры? (Я тоже это пробовал, но без успеха ...)
Мне не обязательно нужен только ответ, я бы предпочел действительно понять, что я должен делать в этом случае и вообще делать меньше ошибок в будущем.
Заранее за вашу помощь.
Удачного дня.
'int ** board;' Этот указатель на указатель никогда не инициализируется; он может указывать на любой указатель в любом месте. – wildplasser
«новое» - это зарезервированное слово в любом компиляторе, способном обрабатывать код на C++, даже несмотря на то, что код имеет значение C. Поэтому настоятельно рекомендуем изменить имя из «нового» на нечто более значимое, что не является зарезервированным словом – user3629249