请教高手:我有如下的程序:处理一个目录下的所有文本文件,当目录下只有一个文件时就不会出错,但是,当出现多个文件时,程序处理玩所有的文本后,在跳出此过程时就出现某一段内存不能读的错误,请高手指教:
谢谢!
void CHzFrequencyDlg::FolderFileFreq(CString m_FolderPath)
{
CFileFind find;/*对目录的文件进行查找*/
BOOL isFind; 
char *fName="";

/* 遍历m_Path目录下的文本文件 */
for ( int i=0;i<HZ_NUM;i++)
HZFreq[i]=0; if( m_FolderPath != "")
{
isFind = find.FindFile(m_FolderPath + "\\*.txt");

while(isFind)
{
isFind=find.FindNextFile();
fName=new char[strlen(find.GetFileName())+1+m_FolderPath.GetLength()];
strcpy(fName,m_FolderPath+"\\"+find.GetFileName());
HZFreqency(fName);
}
}
else
{
AfxMessageBox("输入的路径不能为空!!!");
m_Edit.SetFocus();
}
return;
}当成需要跳出时,就出现:xxxxx内存段 不可读的错误!
当把“HZFreqency(fName);”去掉就没有错误了。
void CHzFrequencyDlg::HZFreqency(CString Filename)
{//计算单个文件的汉字字频
FILE *inFile;
unsigned char c1,c2;
int ID;
if((inFile=fopen(Filename,"rb"))!=NULL)
{
while (!feof(inFile))
{
c1=(unsigned char)fgetc(inFile);
if(c1<128) continue;
if(c1<176)
{
c2=fgetc(inFile);
continue;
}
c2=(unsigned char)fgetc(inFile);
ID=HZ_ID(c1,c2);
HZFreq[ID]++;
}                                                                                       
fclose(inFile);

}
else
{
AfxMessageBox("打开文件时出错!!!");
}
//return;
}
请问是什么原因

解决方案 »

  1.   

    HZ_ID(c1,c2);是什么东东?
    HZFreq[ID]++;
    可能是这句超出数组范围,debug一步步来调一下,看具体是哪句出错啊!!
      

  2.   

    问题就出在“HZFreqency(fName);”过程上,但我不知道该怎么改,跟踪到跳出该过程时出错
      

  3.   

    你把下面的代码
    while(isFind)
    {
    isFind=find.FindNextFile();
    fName=new char[strlen(find.GetFileName())+1+m_FolderPath.GetLength()];
    strcpy(fName,m_FolderPath+"\\"+find.GetFileName());
    HZFreqency(fName);
    }改成下面这样子
    while(isFind)
    {
    fName=new char[strlen(find.GetFileName())+1+m_FolderPath.GetLength()];
      strcpy(fName,m_FolderPath+"\\"+find.GetFileName());
      HZFreqency(fName);
      isFind=find.FindNextFile();
    }
    看看会不会出错
      

  4.   

    你用new为fName动态分配了内存,但是没有释放。应该用delete[] fName;释放内存。
      

  5.   

    同意楼上的。delete后面带[],是为了删除数组。关于字符串的问题,最好用CString类型来处理,这个类有很多有用的函数,很是方便。不妨在编程中使用。详细用法可参考msdn。