0

ファイルを解析しようとしていますが、奇妙なセグメンテーション エラーが発生します。これは私が使用しているコードです:

#include <iostream>

using namespace std;

int main ()
{
    FILE *the_file;
    the_file = fopen("the_file.txt","r");

    if (the_file == NULL)
    {
        cout << "Error opening file.\n";
        return 1;
    }

    int position = 0;
    while (!feof(the_file))
    {
        unsigned char *byte1;
        unsigned char *byte2;
        unsigned char *byte3;
        int current_position = position;

        fread(byte1, 1, 1, the_file);
    }
}

コマンドでコンパイルします

g++ -Wall -o parse_file parse_file.cpp

while ループで current_position を宣言する行を削除すると、コードは問題なく実行されます。その宣言を unsigned char ポインターの宣言の上に移動することもでき、コードは問題なく実行されます。なぜそこにある宣言でセグフォルトになるのですか?

4

1 に答える 1

8

byte1初期化されていないポインターです。ストレージを割り当てる必要があります。

unsigned char *byte1 = malloc(sizeof(*byte1));

fread(&byte1, 1, 1, the_file);

...

free(byte1);

またはさらに良いことに、ポインターをまったく使用しないでください。

unsigned char byte1;

fread(&byte1, 1, 1, the_file);
于 2012-05-01T23:16:48.503 に答える