如此将动态创建的数组内存空间回收,却报错,求高手指教!!!!!!!!

代码如下:(这是一个类中的运算符重载函数)FStringoperator+=(FStringsAppend){char*sAns=newchar[sAppend.Leng... 代码如下:(这是一个类中的运算符重载函数)
FString operator+=(FString sAppend)
{
char* sAns =new char[sAppend.Length()+1];
strcpy(sAns,sString);
strcat(sAns,sAppend.sString);
sString = _strdup(sAns);
delete []( sAns );//经过调试,就在运行这一步时,报错“CRT detected that the application wrote to the end of heap buffer”,什么原因?
return(*this);
};
展开
 我来答
百度网友fa066cb
2012-09-22 · TA获得超过327个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:203万
展开全部
这个问题应该是sAns申请的空间太小了。
char* sAns =new char[sAppend.Length()+1];
sAns指向内存空间=sAppend.Length+1;而strcpy(sAns,sString);已经占用部分空间,当
strcat(sAns,sAppend.sString);连接的时候,估计sAns和sAppend所指向的内存空间已经有部分重叠了,所以在释放内存单元时出错了。

改成:char* sAns =new char[sAppend.Length()+Length+1];再试试,实现两个字符串拼接。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式