2010-02-27 3 views
0
void BinaryTree::InitializeFromFile(string Filename){ 
ifstream inFile; 
treenode* Freq[256]; 
inFile.open(Filename.c_str(), fstream::binary); 
if(inFile.fail()){ 
    cout<<"Error in opening file "<<Filename; 
    return; 
} 
for(int i=0;i<=255;i++){ 
    Freq[i]->weight=0; 
    Freq[i]->data = '0'+i; 
    Freq[i]->LChild = NULL; Freq[i]->RChild=NULL; Freq[i]->Parent=NULL; 
} 
char c; 
inFile.get(c); 
while(!inFile.eof()){ 
    Freq[c]->weight ++; 
    inFile.get(c); 
} 
} 

Я получаю исключение нарушения доступа в цикле for. Даже когда я прокомментирую некоторые строки, это даст мне ошибку на следующей строке в этом цикле.System.AccessViolationException при инициализации массива

Редактировать: Также есть строка Freq[c]->weight ++; Действительно ли? Можно ли перейти к определенной части массива на основе значения char?

ответ

1

Вы, кажется, никогда не инициализируете таблицу Freq. Он содержит случайные указатели. Выделение неинициализированного указателя приводит к неопределенному поведению.

Вы должны добавить Freq[i] = new treenode до Freq[i]->weight=0;.

+0

* Facepalm * Спасибо, я удивлен, что забыл инициализировать его. Любой ответ на мое редактирование? – Azreal

+0

Я прочитал однажды текст Дона Кнута, описывающий глупые ошибки, которые он совершил во время развития TeX; люди просто люди, все делают ошибки. О вашем редактировании: 'Freq [c] -> вес ++', кажется, отлично. – Vlad

Смежные вопросы