Я, как обычно, читал здесь немало постов. Я нашел особенно полезные сообщения об ошибках шины в целом, см. здесь. Моя проблема в том, что я не могу понять, почему мой конкретный код выдает ошибку.
Мой код - это попытка научить себя C. Это модификация игры, которую я сделал, когда изучал Java. Цель моей игры - получить огромный текстовый файл размером 5049 x 1. Случайно выберите слово, перемешайте его и попытайтесь угадать. Я знаю, как все это делать. Так или иначе, каждая строка текстового файла содержит такое слово, как:
5049
must
lean
better
program
now
...
Итак, я создал массив строк в C, попытался прочитать этот массив строк и поместить его в C. Больше я ничего не делал. Как только я помещу файл в C, все остальное будет легко. Еще более странно то, что он соответствует. Моя проблема возникает, когда я запускаю его с помощью команды ./blah
.
Ошибка, которую я получаю, проста. Он говорит:
zsh: bus error ./blah
Мой код ниже. Я подозреваю, что это может быть связано с памятью или переполнением буфера, но это совершенно ненаучно и интуитивно. Итак, мой вопрос прост, почему этот код C выдает мне сообщение об ошибке шины?
#include<stdio.h>
#include<stdlib.h>
//Preprocessed Functions
void jumblegame();
void readFile(char* [], int);
int main(int argc, char* argv[])
{
jumblegame();
}
void jumblegame()
{
//Load File
int x = 5049; //Rows
int y = 256; //Colums
char* words[x];
readFile(words,x);
//Define score variables
int totalScore = 0;
int currentScore = 0;
//Repeatedly pick a random work, randomly jumble it, and let the user guess what it is
}
void readFile(char* array[5049], int x)
{
char line[256]; //This is to to grab each string in the file and put it in a line.
FILE *file;
file = fopen("words.txt","r");
//Check to make sure file can open
if(file == NULL)
{
printf("Error: File does not open.");
exit(1);
}
//Otherwise, read file into array
else
{
while(!feof(file))//The file will loop until end of file
{
if((fgets(line,256,file))!= NULL)//If the line isn't empty
{
array[x] = fgets(line,256,file);//store string in line x of array
x++; //Increment to the next line
}
}
}
}