【问题标题】:Strange Segmentation fault when dealing with files处理文件时出现奇怪的分段错误
【发布时间】:2025-12-05 01:35:01
【问题描述】:

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

#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

如果我删除声明 current_position 的 while 循环中的行,则代码将毫无问题地运行。我还可以将该声明移到 unsigned char 指针的声明之上,代码将毫无问题地运行。为什么它与那里的声明有段错误?

【问题讨论】:

    标签: c++ file-io segmentation-fault variable-declaration


    【解决方案1】:

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

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

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

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

    【讨论】: