char * buffer;
int   CFind_Sent_Word::set_sent_data( const char * sent_string )
{
                            ....... wcbuf_size = end - beg + 1;
buffer = new char[wcbuf_size+10];
FILE *file;
file = fopen( wc_path , "rb" );
if(file == NULL )
{  
delete []buffer;    return 0;   
}
fseek( file , beg , SEEK_SET );
fread( buffer , sizeof(char) , wcbuf_size , file );
fclose( file);
buffer[wcbuf_size] = '\0';
                           .......
        pt = find_prefix(data);
if(pt!=NULL)
{
    //............
                               ........
}
                            ...........                        delete []buffer;
               return max_sent_buf_num;
}char * CFind_Sent_Word::find_prefix( const char * data )
{
     char * part_buf = NULL;
     ...........
     //
      unsigned long int lin = end - beg + 1;
   FILE *file;
   file = fopen(wc_path , "rb");
   if(file == NULL)  return NULL;
   part_buf = new char[lin];
   fseek( file , beg , SEEK_SET );
   fread( part_buf , sizeof(char) , lin , file );
   part_buf[lin] = '\0';
   fclose(file);
        ............
        ///
        delete []part_buf;    //   程序运行在词出现错误 
        return NULL;
}
请问,为什么程序在delete []part_buf就出现错误呢,好像是内存块的错误

解决方案 »

  1.   

    part_buf是不是在前面什么地方已经被delete了?
    检查一下。建议在每一个delete的地方使用下面的格式:
    if (part_buf)
    {
    delete [] part_buf;
    part_buf = NULL;
    }
      

  2.   

    各位朋友,part_buf在前面只是读的操作,没有被delete.
      

  3.   

    还是要检查一下part_buf所有的操作
      

  4.   

    把这一行去掉    part_buf[lin] = '\0';
      

  5.   

    part_buf[lin] = '\0';改为part_buf[lin - 1] = '\0';
      

  6.   

    同意楼上
    part_buf[lin] = '\0';
    导致在delete时内存泄漏