if(strctlSet=="801A")//APN用密码 
{
                  CString strComment,strSum,strCha
  strComment+="26";
strSum="";
  for(int k=2;k>=0;k-=2)
  {
strSum+=strctlSet.Mid(k,2);
  }
  strComment+=strSum;
  strComment+="00010203";
  strCha="0000000000000000000000000000000000000000000000000000000000000000";
  
  strCha.Delete(64-m_data.GetLength()*2,m_data.GetLength()*2);
  
  char *buff=(char* )(LPCTSTR)m_data;
  char *desbuff=new char[m_data.GetLength()*2];
  for(int i=0;i<m_data.GetLength();i++)
  {

           sprintf(desbuff+2*i,"%X",*buff+i);

  }
        CString s2;
        s2.Format("%s",desbuff);
  
  strCha+=s2;
  strSum="";
  for(int m=62;m>=0;m-=2)
  {
  strSum+=strCha.Mid(m,2);
  }
   strComment+=strSum;
   delete desbuff;//***************错误发生的地方***********************
  desbuff=NULL; }为什么我单步调式到这里就程序就挂掉了
错误:DAMAGE:before Normal block(#118866) at 0x00477910(desbuff指针)
new跟delete对应上
而且也过了生存期
为什么不能释放掉
跪求原因

解决方案 »

  1.   

    char *buff=(char* )(LPCTSTR)m_data; 
      char *desbuff=new char[m_data.GetLength()*2]; 
      for(int i=0;i <m_data.GetLength();i++) 
      {           sprintf(desbuff+2*i,"%X",*buff+i);   } 
    这段有问题,char *buff=(char* )(LPCTSTR)m_data; 这段应该先LockBuffer
    然后用GetBuffer获取内容
    使用完之后再UnlockBuffer
      

  2.   

    char *desbuff = new char[m_data.GetLength() * 2 + 1];
    int length = m_data.GetLength();
    for(int i=0; i<length; i++)
    {
        sprintf(desbuff + 2*i, "%02X", buff[i]);
    }
      

  3.   

    char *desbuff=new char[m_data.GetLength()*2+1]; //最后留一个位置保存空字符
    memset(desbuff,0,m_data.GetLength()*2+1);//最好先清零
      for(int i=0;i <m_data.GetLength();i++) 
      {           sprintf(desbuff+2*i,"%X",*buff+i);   }