处理文件时出现奇怪的分段错误

pjg*_*t09 0 c++ file-io segmentation-fault variable-declaration

我试图解析一个文件,我得到一个奇怪的分段错误.这是我正在使用的代码:

#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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我用命令编译它

g++ -Wall -o parse_file parse_file.cpp
Run Code Online (Sandbox Code Playgroud)

如果我删除while循环中声明current_position的行,代码运行没有问题.我也可以将该声明移到unsigned char指针的声明之上,代码将无问题地运行.为什么它会在声明中出现错误?

Oli*_*rth 8

byte1是一个未初始化的指针; 你需要分配一些存储空间.

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

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

...

free(byte1);
Run Code Online (Sandbox Code Playgroud)

或者甚至更好,不要使用指针:

unsigned char byte1;

fread(&byte1, 1, 1, the_file);
Run Code Online (Sandbox Code Playgroud)