いつものように、私はここでかなりの数の投稿を読んでいます。一般的なバス エラーに関する特定の有用な投稿を見つけました。ここを参照してください。私の問題は、特定のコードでエラーが発生する理由を理解できないことです。
私のコードは、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
}
}
}
}