写了一个小程序,运行不稳定,有些时候会报错,忽略错误可以继续运行
跟踪call stack,显示如下
_free_dbg_lk(void * 0x0ed6bf00,int 1) line 1033+60 bytes
_free_dbg(void * 0x0ed6bf00,int 1) line 970+13 bytes
operator delete(void * 0x0ed6bf00) line 351 +12 bytes
CString::FreeData() line 146 +15 bytes
CString::Release() line 157
出错的具体函数代码如下:
CString APPDEAL::CharacterGet(unsigned char *buf, int dwStart, int dwStop)
{
CString temp;
unsigned char *uncTemp1;
uncTemp1=new unsigned char[dwStop-dwStart+1];
memset(uncTemp1,0,dwStop-dwStart+1);
ASSERT (uncTemp1!=NULL);

for (int i=dwStart; i<dwStop; i++)
{
uncTemp1[i-dwStart]=buf[i];
if (buf[i+1]=='\r' && buf[i+2]=='\n')
{
uncTemp1[i-dwStart+1]=0x00;
break;
}
}
temp.Format("%s",uncTemp1);
temp.Replace('/','.'); delete []uncTemp1;
uncTemp1=NULL;
return temp;
}程序有些时候会报错,自己分析应该就在调用完函数返回清理时报错,有些时候正常
程序报错界面如下:Debug Error!
Program:G\code learning\NetScout-0830\NetScout\Debug\NetScout.exe
DAMAGE: after Normal block(#4090921) at 0x0f21cc30想知道是不是该段函数体有不规范的地方,敬请指正

解决方案 »

  1.   

    似乎是访问越界了,怀疑是在 
    if (buf[i+1]=='\r' && buf[i+2]=='\n')我改了一下,你试试CString APPDEAL::CharacterGet(unsigned char *buf, int dwStart, int dwStop)
    {

    const int nMaxLen = dwStop-dwStart+1;
    unsigned char* uncTemp1 = new unsigned char[nMaxLen];
    ASSERT (uncTemp1!=NULL);
    memset(uncTemp1,0,nMaxLen); for (int i=dwStart; i<dwStop; i++)
    {
    *uncTemp1 = buf[i];
    if ((buf[i+1]=='\r' && buf[i+2]=='\n')||(i+2>=dwStop))
    {
    uncTemp1[i-dwStart+1]=0x00;
    break;
    }
    }

    CString temp = uncTemp1;
    temp.Replace('/','.'); delete []uncTemp1;
    uncTemp1=NULL;
    return temp;
    }
      

  2.   

    CString temp; temp.Format("%s", uncTemp1);
    temp.Replace('/','.');
      

  3.   

    _free_dbg_lk(void * 0x0ed6bf00,int 1) line 1033+60 bytes
    _free_dbg(void * 0x0ed6bf00,int 1) line 970+13 bytes
    operator delete(void * 0x0ed6bf00) line 351 +12 bytes
    CString::FreeData() line 146 +15 bytes
    CString::Release() line 157
    一般是堆被破坏.访问越界?