/* 在Unicode下将CString转换为BYTE,返回字节数*/
int String2Bytes(CString str, LPBYTE *lppData)
{
WORD dwHead = 0xFEFF;
int iBuffIndex = 0;
int nCount =  str.GetLength() * 2 + 2;
*lppData = new BYTE[nCount];
memset(*lppData,0,nCount*sizeof(BYTE));
*(WORD*)*lppData = dwHead;
memcpy(*lppData + 2,(LPCTSTR)str, str.GetLength()*2);
return nCount;
}
请大家帮我看看,这段代码哪里有错啊?一执行就会出现内存泄露,请问如何解决?谢谢?想了一天了,还是没有办法搞定

解决方案 »

  1.   

    *lppData = new BYTE[nCount]; ?? 
    delete [] lpppData;
      

  2.   

    忘了说明了,*lppData外面需要用的,再外面是释放了的,现在的问题是
    memcpy(*lppData + 2,(LPCTSTR)str, str.GetLength()*2); //屏蔽就没有问题
    加上就会出问题。
      

  3.   

    lppData 用完了要delete [] 释放
      

  4.   

    这个我知道,我再外面是用delete [] 释放了的
      

  5.   

    干吗要转换?直接用GetBuffer不就可以了?
      

  6.   

    memcpy(*lppData + 2,(LPCTSTR)str, str.GetLength()*2); //屏蔽就没有问题 -----------------------
    lppData 分配空间了吗
      

  7.   

    是不是外面直接delete 没有加[]?
      

  8.   

    memcpy(*lppData + 2,str.GetBuffer(0), str.GetLength()*2); 
      

  9.   

    memcpy(*(lppData + 2),str.GetBuffer(0), str.GetLength()*2); 
      

  10.   

    *lppData + 2 == (*lppData) +2
    修改了基址
      

  11.   

    memcpy(*lppData + 2,(LPCTSTR)str, str.GetLength()*2); 
    //lppData的地址指向变了。
      

  12.   

    int String2Bytes(CString str, LPBYTE *lppData) 
    改成 int String2Bytes(CString str, LPBYTE **lppData
      

  13.   

    LPBYTE lppData;
    String2Bytes(str,&lppData);
    delete lppData;
    没有内存问题