私は単純なボードゲームを書いています。プログラムを実行するときに最初にやりたいことは、空のボードを印刷して、ユーザーにX
とY
の座標を求め、入力した座標にプレーヤートークンを含むボードを印刷します。私はプログラムを実行すると、空のボードを印刷した後、X
座標、その後Y
座標のために私に尋ね、それは私に次のエラーを与える:ゲームボードにトークンを印刷できません
X: 1, Y: 2
Y: 2, Y: 3
Segmentation fault (core dumped)
そのエラーを作るとどのように私はそれを修正できますされてどのような?あなたがそうでなければ、これらの値は未定義であるdata[i].xCoordinate
とdata[i].yCoordinate
を初期化する必要が
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdbool.h>
struct p1Data{
int xCoordinate;
int yCoordinate;
bool flag;
};
char **gameBoard;
int height, width, boardArea, xCor, yCor, dataSize, i;
char **allocateMemory(int boardHeight, int boardWidth);
void fillBoard(char **board, int height, int width, struct p1Data data[], int sizeData);
void printBoard(char **board, int boardHeight, int boardWidth);
void freeBoardArray(char **board, int boardHeight);
int main(int argc, char** argv){
height = 4;
width = 4;
boardArea = height * width;
struct p1Data data[boardArea];
dataSize = sizeof(data)/sizeof(data[0]);
data[0].flag = false;
gameBoard = allocateMemory(height, width);
fillBoard(gameBoard, height, width, data, dataSize);
printBoard(gameBoard, height, width);
printf("\n");
for(i = 0; i < boardArea; i++){
printf("Enter X-Coordinate: ");
scanf("%d", &xCor);
printf("Enter Y-Coordinate: ");
scanf("%d", &yCor);
data[i].flag = true;
data[i].xCoordinate = xCor;
data[i].yCoordinate = yCor;
fillBoard(gameBoard, height, width, data, dataSize);
printBoard(gameBoard, height, width);
printf("\n");
}
return 0;
}
char **allocateMemory(int boardHeight, int boardWidth){
int i;
char **gameBoard;
gameBoard = (char **)malloc(sizeof(char *)*boardHeight);
for(i = 0; i < boardWidth; i++){
gameBoard[i] = (char *)malloc(sizeof(char)*boardWidth);
}
return gameBoard;
}
void fillBoard(char** board, int height, int width, struct p1Data data[], int sizeData){
int i, j, x, y;
for(i = 0; i < height; i++){
for(j = 0; j < width; j++){
board[i][j] = '.';
}
}
if(data[0].flag == true){
for(i = 0; i < sizeData; i++){
x = data[i].xCoordinate;
y = data[i].yCoordinate;
board[x][y] = 'O';
printf("X: %d, Y: %d\n", x, y);
}
}
}
void printBoard(char **board, int boardHeight, int boardWidth){
int i, j;
printf("/");
for(i = 0; i < boardWidth; i++){
printf("-");
}
printf("\\");
printf("\n");
for(i = 0; i < boardHeight; i++){
printf("|");
for(j = 0; j < boardWidth; j++){
printf("%c", board[i][j]);
}
printf("|");
printf("\n");
}
printf("\\");
for(i = 0; i < boardWidth; i++){
printf("-");
}
printf("/");
}
void freeBoardArray(char **board, int boardHeight){
int i;
for(i = 0; i < boardHeight; i++)
free(board[i]);
free(board);
}
コンパイルするときは、常にすべての警告を有効にしてから、これらの警告を修正してください。ポストされたコードは、コンパイラにいくつかの警告を出力させます。 ( 'gcc'のために、最低限の使用で' -Wall -Wextra -pedantic'私は '-Wconversion -std = gnu99'も使用します)あなたを始めようとすると、' argc'と 'argv'は中古。コードはmainに対して以下のシグネチャを使用する必要があります: 'int main(void)' – user3629249