#include<iostream.h>
class circle
{
private:
    int *r;
    float zhouchang;
public:
    circle(int R);
    circle(circle &p);
    ~circle();
    void display();
};
circle::circle(int R)
{
r=new int(2);
r=&R;
cout<<"构造完成"<<endl;
}
circle::circle(circle &p)
{
r=new int(2);
*r=*(p.r);
cout<<"拷贝完成"<<endl;
}
circle::~circle()
{
delete r;
cout<<"析构完成"<<endl;
}
void circle::display()
{
zhouchang=3.14*2*(*r);
cout<<"半径为:"<<r<<"周长为:"<<zhouchang<<endl;
}
void main()
{
circle A(1);
circle B(A);
A.display();
B.display();
} 错出哪了?

解决方案 »

  1.   

    编译了一下,出现了BLOCK_TYPE_IS_VALID错误,应该是指针的问题。
      

  2.   

    circle::circle(int R)
    {
    r=new int(2);
    *r=R;   // 这里
    cout<<"构造完成"<<endl;
    }
      

  3.   

    circle::circle(int R)
    {
    r=new int(2); ----------------------->这个为什么搞个数组?
    r=&R;-------------------------------->*r = R;
    cout<<"构造完成"<<endl;
    }直接定义int r是不是好一些?
      

  4.   

    析构韩树里的delete r错了,程序要delete2次,所以第2次delete出错了
      

  5.   

    circle::circle(int R)
    {
    r=new int(2);
    r=&R;
    cout<<"构造完成"<<endl;
    }原来代码里 r=&R 将指针 r 指向了一个临时变量
    circle A(1) 析构时,delete指向已经不存在的一个临时变量的指针,于是程序就挂了。
    改成 *r=R 就可以了
      

  6.   

    我改了一下:
    程序还有个出错在:cout<<"半径为:"<<r<<"周长为:"<<zhouchang<<endl;
            应该改为:cout<<"半径为:"<<*r<<"周长为:"<<zhouchang<<endl;
    所以程序delete r没任何问题.
    我也运行过了,没问题!
    谢谢上面的前辈指教!