您的位置:首页 > 编程语言 > C语言/C++

C++中由于浅拷贝造成的程序中断错误的简例(编译通过,运行出现中断)

2018-02-26 00:50 507 查看
问题:C++中由于浅拷贝造成的程序中断错误的简例(编译通过,运行出现中断)本程序通过VC++ 6.0编译与测试,程序设计为在指针中存入(0—4),未进行拷贝时,程序不会报错,正常输入,进行拷贝操作后,由于浅拷贝造成程序二次删除,进而报错,具体代码如下://一个分别对两个指针进行赋值的程序,程序正常运行
#include <iostream>
using namespace std;
class Test
{
public:
Test()
{
pvar=new int[5];
for(int i=0;i<5;i++)
{
pvar[i]=i;
}
}
~Test()
{
delete []pvar;
pvar=NULL;
}

void print()
{
for(int i=0;i<5;++i)
{
cout<<pvar[i]<<",";
}
cout<<endl;
}
private:
int *pvar;
};

int main()
{
Test t1;
t1.print();
Test t2;
t2.print();
return 0;
}运行结果:



//在主函数中进行拷贝操作,程序正常编译,运行出现中断
#include <iostream>
using namespace std;
class Test
{
public:
Test()
{
pvar=new int[5];
for(int i=0;i<5;i++)
{
pvar[i]=i;
}
}
~Test()
{
delete []pvar;
pvar=NULL;
}

void print()
{
for(int i=0;i<5;++i)
{
cout<<pvar[i]<<",";
}
cout<<endl;
}
private:
int *pvar;
};

int main()
{
Test t1;
t1.print();
Test t2;
t2.print();
t1=t2; //此处由于浅拷贝造成二次删除,从而引发中断错误
return 0;
}程序运行结果:



总结:
       对象如果含有指针成员变量,而指针变量又指向堆上空间,将只拷贝指针成员变量本身的值,造成两个对象的指针指向同一块堆上的内存空间,删除对象时(含复制)会造成二次删除,进而引发程序中断
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C 程序中断 浅拷贝
相关文章推荐