2012-05-01 85 views
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指針的聲明之上,代碼將會毫無問題地運行。爲什麼它在該處的聲明有問題?

回答

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);