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;
}
答案 0 :(得分:0)
strlen
不包含null
终止符,因此您必须将1
添加到您分配的金额中:
str = new char [strlen(ko) + 1];
如果不执行此操作,strcpy()
将注销已分配内存的末尾并破坏其中的任何内容。