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

Strange Segmentation fault when dealing with files

本文关键字:分段 错误 文件 处理      更新时间:2023-10-16

我正在尝试解析一个文件,但我遇到了一个奇怪的分段错误。这是我正在使用的代码:

#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的行,代码可以毫无问题地运行。我还可以将该声明移动到无符号字符指针的声明上方,代码将毫无问题地运行。为什么它在那里的声明有问题?

byte1是一个

未初始化的指针;你需要分配一些存储空间。

unsigned char *byte1 = malloc(sizeof(*byte1));
fread(&byte1, 1, 1, the_file);
...
free(byte1);

或者更好的是,根本不使用指针:

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