CString strtemp,str; 
while(!feof(fpOntology))  

  if((c=fgetc(fpOntology))!='\n') 
  { 
tempword[i++]=c; 
  } 
  else 
  { 
    strtemp.Format("%s",tempword); 
    p=(OntologyNode *)malloc(sizeof(OntologyNode)); 
    index=strtemp.Find('\t'); 
    str=strtemp.Left(index);  //出错的地方 
    p->member1=new char(30); 
    strcpy(p->member1,str); 
    . 
........... 
  } 
} 从文件中读出每一行,然后把每一行的单词按'\t',分出一个一个单词, 
可是读到第5行的时候,也就是循环5次的时候, str=strtemp.Left(index);就出现错误,File:dbgheap.c,Line:1017. 
断点调试时,进入: pPrev->pEntryPrev->pEntryNext = pPrev->pEntryNext; 请VC高手们指教!!!

解决方案 »

  1.   

    文件是什么模样的呢,是不是找不到'\t',导致index已经是0值或负数?
      

  2.   

    index是否为-1了?监测一下
      

  3.   

    调试,出错是因为index的值是一个结束值,而对CString为说是非法的,
      

  4.   

     index=strtemp.Find('\t'); 
     str=strtemp.Left(index);  //出错的地方 判断一下 index 是否为 -1
    Cstring::Find 如果找不到指定的字符,会返回 -1 的
      

  5.   

     p->member1=new char(30); 
    应该是 p->member1=new char[30]; 
      

  6.   

    的确应该跟踪 index的值看看
    遇到这种 提示问题所在行的 
    在这一行加断点
    单步运行
    看数值 是否合法 然后做相应修改
    这是调试最基本的方式
      

  7.   

    问题多多,弱弱的问一下,当你读到\r\n的时候,有没有把令\r处的字符=0?
    还有那个i好像没初始化
      

  8.   

    解决了,谢谢5楼,自己太不小心了,p->member1=new char(30); 
    应该是 p->member1=new char[30]; 
    马上给分