如此将动态创建的数组内存空间回收,却报错,求高手指教!!!!!!!!
代码如下:(这是一个类中的运算符重载函数)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);
}; 展开
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);
}; 展开
1个回答
展开全部
这个问题应该是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];再试试,实现两个字符串拼接。
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];再试试,实现两个字符串拼接。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询