LIST_ENTRY已在C ++中被破坏(即双重删除)

时间:2017-10-01 10:13:35

标签: c++

stackoverflow的圣人。在我的析构函数中,有一个问题是随着堆的移除而不断出现。问题用描述了LIST_ENTRY已被破坏(即双重删除)错误。但我无法弄清楚我错在哪里:我在构造函数中分配了一些内存,然后在我的析构函数中使用运算符delete[]释放了该内存。不再发生任何类型的内存删除。所以有什么问题。 代码:

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;

}

析构函数:

~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;
}

1 个答案:

答案 0 :(得分:0)

strlen不包含null终止符,因此您必须将1添加到您分配的金额中:

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

如果不执行此操作,strcpy()将注销已分配内存的末尾并破坏其中的任何内容。