内存分配与释放问题请教

码大虾 2017-09-21 04:45:03
string AesEncryptor::EncryptString(string strInfor) {
int nLength = strInfor.length();
int spaceLength = 16 - (nLength % 16);
unsigned char* pBuffer = new unsigned char[nLength + spaceLength];
memset(pBuffer, '\0', nLength + spaceLength);
memcpy_s(pBuffer, nLength + spaceLength, strInfor.c_str(), nLength);
m_pEncryptor->Cipher(pBuffer, nLength + spaceLength);

// 这里需要把得到的字符数组转换成十六进制字符串
char* pOut = new char[2 * (nLength + spaceLength)];
memset(pOut, '\0', 2 * (nLength + spaceLength));
Byte2Hex(pBuffer, nLength + spaceLength, pOut);

string retValue(pOut);
delete[] pBuffer;
delete[] pOut;
return retValue;
}

在delete[] pOut时报错,弹出对话框:Windows 已在 ***.exe 中触发一个断点。其原因可能是堆被损坏
...全文
203 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
这不是鸭头 2017-09-23
  • 打赏
  • 举报
回复
贴代码的时候,记得选一下C/C++的格式。
lonelyhacker 2017-09-22
  • 打赏
  • 举报
回复
Byte2Hex(pBuffer, nLength + spaceLength, pOut); //这句可能转换的时候越界了。 你可以尝试把这条注释掉,然后看看还有没有问题,如果有问题,就是这句出现的错误。
零隐 2017-09-22
  • 打赏
  • 举报
回复
你的转换已经超出pOut所能承受的长度。 你把pOut设置长点。或者谁写的函数问下这个长度该定义多长合适。 记得给分。
zgl7903 2017-09-22
  • 打赏
  • 举报
回复
Byte2Hex 是怎么写的? 估计有越界问题
smwhotjay 2017-09-22
  • 打赏
  • 举报
回复
要么用c方法。调用时传递buff和buffsize,如果保存的数据超过bufsize,就return 一个负的错误码,如果数据足够容纳,那么return 1 要么string retValue(pOut); 改成 string retValue; retValue=pOut; 这就是内部浅拷贝和深拷贝那些事,不熟则避免
棉猴 2017-09-21
  • 打赏
  • 举报
回复
个人觉得与string的“写时拷贝”特性有关
string retValue(pOut);
根据“写时拷贝”特性,retValue和pOut指向同一块内存,在程序结束时,string类的析构函数已经释放了这块内存,然后再调用
delete[] pOut;
释放这块已经被释放的内存,就会报错!
schlafenhamster 2017-09-21
  • 打赏
  • 举报
回复
int nLength = strInfor.length(); 如果 长度不大 ,不要 new delete char Out【4096】;
码大虾 2017-09-21
  • 打赏
  • 举报
回复
没有专家来指导下吗?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧