C で 2 次元配列を割り当てて出力しようとしていますが、メソッドは機能しているように見えますが、配列を出力するとセグメンテーション エラーが発生します。何か案は?
#include <stdio.h>
#include<stdlib.h>
#define WALL 1;
#define EMPTY 0;
int rows;
int columns;
int startRow, startCol;
void getPuzzleParams();
void printMaze();
int solve(char** puzzle, int, int);
void findStartAndEnd(char** puzzle);
main() {
getPuzzleParams();
char **puzzle;
puzzle = (char **)malloc(sizeof(char *)*rows);
int y;
for(y = 0; y < rows;y++)
puzzle[y] = (char *)malloc(sizeof(char)*columns);
FILE *fptr;
char c;
char file_name[20];
int i,j;
printf("Type in the name of the file containing the Field\n");
scanf("%s",file_name);
fptr=fopen(file_name,"r");
for (i=0; i<rows; i++)
for (j=0; j<columns; j++){
c=fgetc(fptr);
while ( !((c == '1')||(c =='0')) ) c=fgetc(fptr);
puzzle[i][j]=c;
}
fclose(fptr);
for (i=0; i<rows; i++) {
for (j=0; j<columns; j++) {
if (j == 0) printf("\n");
printf("%c ",puzzle[i][j]);
}
}
printf("\n");
printf("print");
//printMaze(puzzle);
printf("find");
findStartAndEnd(puzzle);
printMaze(puzzle);
solve(puzzle, 1, 2);
}
void getPuzzleParams() {
printf("Enter the dimensions of the puzzle which need to be between 5 and 100\n");
printf("Enter the desired number of Rows: ");
scanf("%d", &rows);
printf("Enter the desired number of Columns: ");
scanf("%d", &columns);
printf("Rows: %d, Columns: %d\n", rows, columns);
if(rows > 100 || rows < 5 || columns > 100 || columns < 5) {
getPuzzleParams();
}
}
void printMaze(char** puzzle) {
int i,j;
for (i=0; i<rows; i++)
for (j=0; j<columns; j++) {
if (j == 0) printf("\n");
printf("%c ",puzzle[i][j]);
}
printf("\n");
printf("sdfsdF");
}
void findStartAndEnd(char** puzzle) {
int foundEnterence = 0;
int i;
printf("start");
for(i = 0; i < columns; i++) {
printf("top row");
if(puzzle[0][i]=='0') {
if(!foundEnterence) {
foundEnterence = 1;
startRow = 0;
startCol = i;
puzzle[0][i] = 'S';
} else {
puzzle[0][i] = 'G';
}
}
}
for(i = 0; i < rows; i++) {
if(puzzle[i][rows]=='0') {
if(!foundEnterence) {
foundEnterence = 1;
startRow = i;
startCol = rows;
puzzle[i][rows] = 'S';
} else {
puzzle[i][rows] = 'G';
}
}
}
for(i = columns; i >= 0; i--) {
if(puzzle[rows][i]=='0') {
if(!foundEnterence) {
foundEnterence = 1;
startRow = rows;
startCol = i;
puzzle[rows][i] = 'S';
} else {
puzzle[rows][i] = 'G';
}
}
}
for(i = rows; i >= 0; i++) {
if(puzzle[i][0]=='0') {
if(!foundEnterence) {
foundEnterence = 1;
startRow = i;
startCol = 0;
puzzle[i][0] = 'S';
} else {
puzzle[i][0] = 'G';
}
}
}
}
int solve(char** puzzle, int x, int y) {
printf("%c",puzzle[x][y]);
}
malloc の不適切な使用による問題かもしれませんが、いくつかの異なる初期化を試みましたが、成功しませんでした。
編集:コマンドライン出力は次のとおりです。
Enter the dimensions of the puzzle which need to be between 5 and 100
Enter the desired number of Rows: 12
Enter the desired number of Columns: 10
Rows: 12, Columns: 10
Type in the name of the file containing the Field
maze.txt
1 1 1 1 1 1 1 0 1 1
1 1 0 0 1 0 0 0 0 1
1 0 0 0 1 0 0 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 1 0 0 1 0 1 1 0
1 1 0 0 0 1 0 1 1 1
1 1 0 1 1 0 0 0 0 1
1 0 1 0 0 1 0 1 0 1
1 1 1 0 1 0 1 0 1 1
1 0 0 1 0 1 0 0 0 1
1 0 0 0 1 1 1 0 1 1
1 1 1 1 1 1 1 1 1 1
Segmentation fault