我正在尝试解析文件,我遇到了一个奇怪的分段错误。这是我正在使用的代码:
#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指针的声明之上,代码将无问题地运行。为什么它会在声明中出现错误?
答案 0 :(得分: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);