yhh2530080997 发表于 2015-8-28 17:50:41

请帮助初学者!!!c++

请大神看一下这个程序为什么会崩溃!!!
#include <iostream>
using namespace std;
class A
{
public:
        A(){x=new int;*x=5;}
        ~A(){delete x;/*x=NULL*/;}
        A(const A&a)//a代表形式参数,传递进来的对象
        {
                cout<<"复制构造函数执行。。。\n"<<endl;
                x=a.x;//浅拷贝
        }
        void print()const{cout<<*x<<endl;}
        void set(int i){*x=i;}
private:
        int *x;
};
int main()
{
        A*a=new A();
        cout<<"a:";
        a->print();
        cout<<endl;
        A b=(*a);
        b.print();
        a->set(32);
        cout<<"b:";
        b.print();
        cout<<endl;
        delete a;
        return 0;
}

迷雾少年 发表于 2015-8-28 18:25:31

        delete a;

此时会调用 ~A(){ delete x;/*x=NULL*/; }   

然后在main函数结束时
再调用b 的析构函数~A(){ delete x;/*x=NULL*/; }   x被delete过了 你现在再delete 就错了

Delta 发表于 2015-8-29 13:04:18

整个程序只创建一个对象,只有一个x(*a中的与b中的是一样的,从a->set(32);b中的也改变 也能看出来),怎么能delete两次?
页: [1]
查看完整版本: 请帮助初学者!!!c++