2010-02-27 229 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]->weight=0;之前加Freq[i] = new treenode

+0

* Facepalm *谢谢,我很惊讶,我忘了初始化它。任何我的编辑答案? – Azreal 2010-02-27 18:55:25

+0

我读过一天Don Knuth的文字,描述他在TeX开发过程中犯的愚蠢错误;人们只是人,每个人都会犯错误。关于你的编辑:'Freq [c] - > weight ++'似乎完全没问题。 – Vlad 2010-02-27 19:21:24