System.AccessViolationException при инициализации массива - PullRequest
0 голосов
/ 27 февраля 2010
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. Даже если я закомментирую определенные строки, это приведет к ошибке на следующей строке в этом цикле.

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

1 Ответ

1 голос
/ 27 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...