期待分段错误但获得双重免费或损坏(fasttop):0x0000000000cf4c20 ***
PFB代码
#include<iostream>
using namespace std;
class test
{
public:
int size;
int *elem;
test(int x):size(x),elem(new int[x])
{
cout<<"default constructor"<<endl;
}
test(const test & x)
{
cout<<"copy constructor and shallow copying";
this->size=x.size;
this->elem=x.elem;
}
~test()
{
delete [] elem;
}
void display()
{
for (int i=0;i<size;i++)
{
cout<<*(elem+i)<<endl;
}
}
};
int main()
{
test t(3);
t.elem[0]=12;
t.elem[1]=24;
t.elem[2]=33;
{
test f(t);
f.display();
t.display();
}
t.display();
}
我正在尝试理解浅层复制,并期待分段错误。
答案 0 :(得分:5)
除了指向已分配内存的有效指针或nullptr
到delete
(或delete[]
)之外的任何内容都会导致未定义的行为。
此外,由于您在t
销毁delete[]
后将f
对象中的指针用于<{1}},因此您已经存在未定义的行为在您上一次display
来电。
当你有UB(未定义的行为)时,会发生什么,这真的是无关紧要的。有时可能似乎工作正常(比如在删除内存后调用display
),有时会出现分段错误,有时会出现其他错误(例如双重错误)免费),有时你得到nasal demons。根据其定义,未定义的行为是 undefined 。