Я застрял на этой одной части, и я надеялся получить помощь. У меня есть проект, который в основном является поиском слов. Программа читает файл, содержащий строки и столбцы, за которыми следует головоломка поиска слов. Вы должны создавать возможные комбинации строк из поиска слов и проверять эти комбинации со словарем, который предоставляется в виде другого текстового документа.Вне границ Ошибка 2D-массива в C
Вот пример файла для чтения в 1 является Ряды и второй в Cols следуют головоломки слово для поиска:
4 4
syrt
gtrp
faaq
pmrc
Так что я был в состоянии получить большую часть кода для работы функции, кроме который создает строки для вышеуказанного файла. В основном ему нужно искать словарный поиск и создавать строки, каждая созданная строка передается другой функции, чтобы проверить, находится ли она в словаре. Однако мой код продолжает выходить за рамки при создании строк, и он продолжает вызывать сбои Seg, которые действительно расстраивают.
Тезисов константа, объявленная, его все возможные направления идти при поиске поиска слова головоломки для возможных комбинаций строк
const int DX_SIZE = 8;
const int DX[] = {-1,-1,-1,0,0,1,1,1};
const int DY[] = {-1,0,1,-1,1,-1,0,1};
Это функция, я должен создать строки:
int strCreate(char** puzzle, char** dictionary, int n, int rows, int col){
int x, y;
int nextX, nextY, i;
char str[20] = {0};
int length = 1;
for(x = 0; x < rows; x++)
{
for(y = 0; y < col; y++)
{
//Grabs the base letter
str[0] = puzzle[x][y];
length = 1;
for(i = 0; i < DX_SIZE; i++)
{
while(length < MAX_WORD_SIZE)
{
nextX = x + DX[i]*length;
nextY = y + DY[i]*length;
// Checking bounds of next array
//This is where I'm having trouble.
if((x + nextX) < 0 || (nextX + x) > (col-1)){
printf("Out of bounds\n");
break;
}
if((y + nextY) < 0 || (nextY + y) > (rows-1)){
printf("Out of bounds\n");
break;
}
str[length] = puzzle[nextX][nextY];
//search for str in dictionary
checkStr(str, dictionary, n);
length++;
}
memset(&str[1], '\0', 19);
}
}
}
return 0;
}
Я знаю, что я не проверяю границы правильно, я просто не могу понять, как это сделать. Когда X = 1 и nextX = -1, который проходит проверку границ, однако скажем, что массив находится в головоломке [0] [0], следующий X поставил бы головоломку [-1] [0], которая выходит за пределы, вызывающие ошибку seg.
Спасибо, что нашли время, чтобы прочитать, и я ценю любую помощь вообще.
Я думаю, что приезд, предназначенный для DX и XY, выглядит хорошо. Не могли бы вы добавить более подробную информацию о том, как определяются головоломки и str? –
Str определяется в верхней части функции. Головоломка объявляется с использованием динамического распределения памяти, используя строки и столбцы из файла, который читается. – Kris
@Kris Пожалуйста, не удаляйте код из вопроса. Это заставляет ответ выглядеть полностью вне контекста. – vsoftco