CString szCKey, szCName, szFile, szTmp;
CFile File;
PCHAR pName, pKey, pMix;
PBYTE pbBuffer, pbFBuffer, pbKBuffer, pbNBuffer, pbMix, pbTmp;
DWORD dwFileLen, dwNameLen, dwKeyLen;m_MPath.GetWindowText(szFile);
m_Private.GetWindowText(szCKey);
m_RegName.GetWindowText(szCName);
szCKey.Trim(" ");
szCKey.Remove('-');
szCName.Trim(" ");
szTmp = szCKey + szCName;dwNameLen = szCName.GetLength(); 
dwKeyLen = szCKey.GetLength(); 
pName = new char[dwNameLen+1]; 
pKey = new char[dwKeyLen+1];
pMix = new char[dwNameLen+dwKeyLen+1];
strcpy(pName, szCName);
strcpy(pKey, szCKey);
strcpy(pMix, szTmp);File.Open(szFile, CFile::modeRead); // 打开 mpf 功能文件
dwFileLen = File.GetLength();
pbBuffer = new BYTE[dwFileLen]; // 为文件分配内存
pbFBuffer = new BYTE[dwFileLen]; // 为新文件缓冲区分配内存
File.SeekToBegin();
File.Read(pbBuffer, dwFileLen); // 文件数据读入缓冲区
File.Close();pbKBuffer = new BYTE[dwKeyLen];
pbNBuffer = new BYTE[dwNameLen];Encrypt(pbBuffer, pbFBuffer, dwFileLen, pMix); // 文件加密
Encrypt((PBYTE)pKey, pbKBuffer, dwKeyLen, pName); 
Encrypt((PBYTE)pName, pbNBuffer, dwNameLen, pKey);File.Open("license.db", CFile::modeCreate | CFile::modeWrite);File.SeekToBegin();
File.Write(pbKBuffer, dwKeyLen);
File.SeekToEnd();
File.Write(pbFBuffer, dwFileLen);
File.SeekToEnd();
File.Write(pbNBuffer, dwNameLen);File.Close();delete pbBuffer;
delete pbFBuffer;
delete pbKBuffer;  // <--------当执行到这时提示 xx.exe中的 0x77f75a58 处未处理的异常: 用户断点 。中断的地方是 free.c 中的#endif  /* _WIN64 */
        {
            HeapFree(_crtheap, 0, pBlock);
        }这是怎么回事?

解决方案 »

  1.   

    后面还有几个delete,只因为到上面的位置就中止了,我没继续贴
      

  2.   

    以前也遇到过这种问题,一般是程序中有地方访问数组越界。
    还有
    delete []pbBuffer;
    ……
      

  3.   

    Encrypt 已经解决了越界问题
    可是外部还是在 delete 那块出错delete [] 和 delete 有什么区别?
      

  4.   

    delete pbBuffer;=>delete [] pbBuffer;……仔细检查你的加密程序.
      

  5.   

    使用堆分配为数组分配内存应该这样释放
    delete []pbBuffer;
    delete []pbFBuffer;
    delete []pbBuffer;
      

  6.   

    使用Release编译保证你不会出错了~~~~~~
    呵,不过还是排一排错吧
      

  7.   

    问题可能出现在 Encrypt 函数中,把 Encrypt 注释掉就没问题
    但 boundscheck 还是提示在 delete 的时候有泄漏Allocation Conflict: Attempting to call free on pointer 0x014366D8, that was allocated by global_operator_new_array.这是怎么回事?
      

  8.   

    我用的就是 release ....
      

  9.   

    基本同意 lyzcom(初学者) 的意见。
      

  10.   

    最好使用 delete []pbBuffer;
    文件加密函数处可能有问题。
      

  11.   

    使用delete而没有使用delete []只是造成内存泄漏,不应该报错的。
    检查加密算法吧,可能是算法里面修改了指针的地址。
      

  12.   

    如:
     char * pszName = new char[3] ;
     char name[4] = "ooo" ;
     pszName = name ;
     delete pszName ;是不行的