程序是从数据库中取值,并添加入一个文件中去我的代码是:
block=new char[BLOCK_LENGTH*(bLength+1)];  //bLength为记录集的记录个数
strcpy(block,"");
tRecord=0;
while(!m_pRecordset->adoEOF){    //从数据库中取值
    取到的值记录在line[4]中
    
    //在取到值后将点记录入折点文件中去
    //我记录的是一条折线上的所有折点坐标
if(tRecord==0){
    sprintf(temp,"%f %f\r\n",line[0],line[1]);
            strcat(block,temp);
            tRecord++;
}
    sprintf(temp,"%f %f\r\n",line[2],line[3]);
    strcat(block,temp);
    m_pRecordset->MoveNext();
}//while end...
points->append_block(block,bLength+1);   //将block字段写入到折点文件中去

//delete block;
//free(block);
delete[] block;程序如此,主要是在程序段前申请了一个block字符串,在我向block写入值并在程序段后释放block时,程序出错,出错语句就是在delete[] block上,从程序度中大家可以看到,我试过了delete block,free(block)都不行。请问这是怎么一回事呢?如果我不释放block,程序又会因为内存泄漏的问题而无法全部执行,郁闷ing

解决方案 »

  1.   

    可能的情况是,在你delete[] block前,block的地址已经被改变了。因此delete必然死掉。
    调试跟踪,看看block这个地址有没有发生变化
      

  2.   

    c&c++我都看晕了,用delete[]来删除动态数组是没错的,new+delete, malloc+free,别搞乱了
      

  3.   

    把对 block的操作记录下来来
    确定长度没有超过
    BLOCK_LENGTH*(bLength+1)
      

  4.   

    或者给block设置一个很大的值 比如 1M,
    然后将这段内存初始化为 0
    再用的时候没有错,就是内存访问越界了。