堆积如山的圣人。在我的destructor.The问题中,堆清除经常会出现一个问题,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;
}
发布于 2017-10-01 10:18:36
strlen
不包括null
终止符,因此必须在分配的金额中添加1
:
str = new char [strlen(ko) + 1];
如果不这样做,strcpy()
将注销所分配的内存的末尾,并破坏存在的任何内容。
https://stackoverflow.com/questions/46511366
复制相似问题