首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LIST_ENTRY已在C++处损坏(即双移除)

LIST_ENTRY已在C++处损坏(即双移除)
EN

Stack Overflow用户
提问于 2017-10-01 10:13:34
回答 1查看 4.5K关注 0票数 0

堆积如山的圣人。在我的destructor.The问题中,堆清除经常会出现一个问题,LIST_ENTRY被破坏了(即双重删除)错误。但我不知道哪里错了:我在构造函数中分配了一些内存,然后在析构函数中释放了操作符delete[]的内存。不再发生任何类型的内存删除。那有什么问题。代码:

代码语言:javascript
运行
复制
String():str(NULL), length(0)
{
    str=new char [100];
    cout<<"Default constructor has been used"<<endl;}
String( const char* ko)
{

str=new char [strlen(ko)];
strcpy(str,ko);
cout<<endl;
length=strlen(ko);
cout<<"The object is initialized"<<endl;
}

String(String &y)
{
    length=y.length;
    str=new char[length];
    strcpy(str,y.str);
    cout<<endl;

}

破坏者:

代码语言:javascript
运行
复制
~String ()
{
length=0;
char* spp=str+1;
delete[] str;/*Here is the point of error(btw if get this  operator out the code the programm works fine)*/
str=NULL;
cout<<spp;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-01 10:18:36

strlen不包括null终止符,因此必须在分配的金额中添加1

str = new char [strlen(ko) + 1];

如果不这样做,strcpy()将注销所分配的内存的末尾,并破坏存在的任何内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46511366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档