Мой код опубликован ниже, я уверен, что ошибка сегментации происходит в цикле while в нижней части main().Ошибка сегментации (сбрасывание ядра) c
Моя программа должна прочитать файл, данные в форме сетки, fscanf получает размеры сетки, а затем создает 2D-массив с этими размерами, затем я использую цикл while для прохождения строки за строкой а затем цикл for, чтобы пройти через символ по символу в этой строке, чтобы сохранить его во внутренней части массива, тогда i ++ отправляет его на следующий уровень 2D-массива.
может ли кто-нибудь сказать мне, почему это делается?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char direction;
int steps;
int cur[2];
char** gridArray;
int* move(int cur[2]);
int* getCommand(int next[2], char** gridArray);
char** make2DFileArray(int sizeX, int sizeY);
int* makeArray(int size);
int main(int argc, char *argv[])
{
FILE *fp;
int rows;
int columns;
int i=0,j;
char line[1000];
if ((argc < 2)^(argc > 3)) {
fprintf(stderr, "Usage: thebox mapfile [maxsteps]\n");
exit(1);
}
if(argc < 3) { steps = 10; }
else { steps = argv[2]; }
fp = fopen(argv[1], "r");
if(fp == NULL) {
fprintf(stderr, "Missing map file.\n");
exit(1);
}
fscanf(fp, "%d %d", &rows, &columns);
gridArray = make2DFileArray(rows+1, columns);
while (fgets(line, 1000, fp) != NULL) {
for(j=0; j < columns - 1; j++) {
gridArray[i][j] = line [j];
}
i++;
printf("%s", line);
}
fclose(fp);
printf("(sidepos)>\n");
return 0;
}
и мой вспомогательный метод, это
char** make2DFileArray(int sizeX, int sizeY)
{
int i;
char** array;
array = (char**) malloc(sizeX*sizeof(char*));
for (i = 0; i < sizeX; i++) {
array[i] = (char*) malloc(sizeY*sizeof(char));
return array;
}
return array;
}
int* makeArray(int size)
{
int* array;
array = (int*) malloc(size*sizeof(int));
return array;
}
ли вы на самом деле имели в виду, чтобы написать это ', если ((ARGC < 2)^(argc > 3))'? – cnicutar
Каков внутренний 'возвращаемый массив,' для 'make2DFileArray()'? Это опечатка? – alk
Хорошим началом было бы запустить вашу программу в отладчике. После этого отладчик остановится, когда и где произойдет сбой. Затем вы можете проверить стек вызовов функций и подойти к нему, если авария не произойдет в вашем собственном коде. Отладчик также позволит вам изучить значения переменных, которые помогут вам понять, почему произошел сбой. –