怪事:delete [] sss;会报: DAMAGE:after Normal block(#84) at 0x00345350
代码主要是调用dll封装的一个加密解密函数。代码如下:
char * ss = " 11g中国 g ";
int len = strlen(ss);
char *sss = new char[len];
HINSTANCE     dllinstance;
dllinstance=::LoadLibrary("E:\\EncryptDll\\Debug\\EncryptDll.dll");
if(dllinstance==NULL) AfxMessageBox("can't open dll file");
typedef void (FAR __stdcall *MYWENT)(char*,char*);
MYWENT  proc;
proc=(MYWENT)GetProcAddress(dllinstance,"Encode");
if(proc==NULL) AfxMessageBox("can't find function");
else{ 
proc(ss,sss);
AfxMessageBox(sss);
}
delete [] sss;
::FreeLibrary(dllinstance);其中dll中的Encode函数如下:
char cryptokey[] = "qwertyuiop[]asdfghjkl;'zxcvbnm,.1234567890-=";
const int cryptokeylen = strlen(cryptokey);
void __stdcall Encode(char* usrkey,char* returnval)

    int len = strlen(usrkey);
    for (int i=0; i<len; i++)
    {
        returnval[i] = usrkey[i]^cryptokey[i%cryptokeylen];
    }
    returnval[i] = '\0';
} 错误就发生在: delete [] sss; 这一行.跟踪进去发现错误在这里:
            if (!CheckBytes(pbData(pHead) + pHead->nDataSize, _bNoMansLandFill, nNoMansLandSize))
                _RPT3(_CRT_ERROR, "DAMAGE: after %hs block (#%d) at 0x%08X.\n",
                    szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
                    pHead->lRequest,
                    (BYTE *) pbData(pHead));

解决方案 »

  1.   

    void __stdcall Encode(char* usrkey,char* returnval)
    returnval内存访问越界,外面申请的是空间是len个char,应该申请len + 1个,这样你才能设置: returnval[i] = '\0';
    不然returnval[i] 不是你所申请的内存却修改了,所以当机了。
      

  2.   

    thanks 没想到是这里出错误。^&^
      

  3.   

    char * ss = " 11g中国 g ";
    int len = strlen(ss);char *sss = new char[len];change to: char *sss = new char[len];
      

  4.   

    装个bc6.5,然后rebuilt all with bc,再在vc里面运行的话,可以把大部分的错误都自动检测出来(如api failed/函数参赛错误/指针丢失/内存写越界)