TCHAR t_i = (TCHAR)i;
HGLOBAL hData = GlobalAlloc(GHND, (sContens.GetLength()+2)*2 );
TCHAR *pS = (TCHAR *)GlobalLock( hData );
         memcpy(pS , &t_i ,2);
memcpy( pS+2, (LPCTSTR)sContens, (sContens.GetLength()+1)*2 );
GlobalUnlock( hData );想在hData内存块中写入一个整数i和一个字符串sContens,报错堆被损坏了,请问原因是什么?如何修正呢?谢谢

解决方案 »

  1.   

    你的程序尽管写的不对,拿到非Unicode下结果会不对,单单凭这片段程序没看出来导致堆损坏.
    1)(sContens.GetLength()+2)*2 应该要变为(sContens.GetLength() + sizeof(TCHAR) * 2);
    2)memcpy(pS , &t_i ,2) 应该要变为memcpy(pS , &t_i , sizeof(TCHAR));
    3) memcpy(pS+2, (LPCTSTR)sContens, (sContens.GetLength()+1)*2 )应该要变为
       memcpy(pS+sizeof(TCHAR), (LPCTSTR)sContens, sContens.GetLength);