以下代码在func运行期间会发生什么事情。 
class A 

public: 
char* pcBuff; 
A(){pcBuff=new char[100];} 
~A(){delete pcBuff;} 
}; 
void func() 
{  int i; 
  A clsA;
   for(i=0;i<=8;i++) 
      func1(clsA); 

func1(A clsA) 

   int i=0; 
   

解决方案 »

  1.   

    应该改为:
    void func() 
    {  int i; 
      A *clsA=new A;
       for(i=0;i<=8;i++) 
          func1(*clsA); 

      

  2.   

    void func()
    {  int i;
       for(i=0;i<=8;i++)
          func1(clsA);//这里错误
    }
    异常跳出
      

  3.   

    我想听听JAVA_CJH(CJH)
    为什么会出现异常终止??
      

  4.   

    1,fun1应在使用前声明
    2,func1没有返回类型
    3类定义有点问题
      

  5.   

    cslA在调用func1后被析构所以第二次调用时因无法析构而终止
      

  6.   

    在调用func1(A clsA)时传递的是一个类,而非一个类的指针,也就是说,将重新构造一个A的实例(重新调用一次构造函数),然后拷贝claA中的成员到新的类实例中,这样新分配的内存指针被覆盖,造成泄漏,同时在析构时同一个内存指针会被delete两次,因而产生异常
      

  7.   

    Stavck(o_O)一针见血,请再提出解决方案完之后我可以收贴子发分了。
      

  8.   

    定义一个拷贝构造函数就可了,或func1该成引用
      

  9.   

    发生什么事情有调用func1(clsA);时拷贝构造操作,
    退出时的析构。虽然 
    for(i=0;i<=8;i++)
    func1(clsA)发生了9次这样的操作。但析构时
    只delete了一个字节的内存。泄漏了99字节内存。
      

  10.   

    运行异常终止!
    func1(A clsA) 

       int i=0; 
       

    参数使用传值调用时,编译器将类复制一份放入堆栈,
    如果无拷贝函数将调用默认拷贝函数。A(&A);
    这时成员变量是一一对应复制的,因此堆栈中的
    对象pcBuff未分配空间,析构时产生异常。解决方法:
    一、
    func1(A &clsA) 

       int i=0; 
       
    }
    二、
    func1(A *clsA) 

       int i=0; 
       

    三、
    class A
    {
    public:
        ....
        A(A &a)
       {
      pcBuff=new char[100];
    memcpy(pcBuff, a.pcBuff, 100);
       }
       ....
    }
      

  11.   

    需要增加类似这样的构造函数,问题就没有了
    A(A& a)
    {
    pcBuff = new char[100];
    memcpy(pcBuff, a.pcBuff, 100);
    }
      

  12.   

    程序缺乏拷贝构造函数,当第二次循环后,因为系统没有调用构造函数,却调用了析构函数,所以会出现down机,程序正确写法为:class A
    {
       public:
       char* pcBuff;
       A(){pcBuff=new char[100];}
       
       A(const A& a){pcBuff=new char[100];}  //增加拷贝构造函数   ~A(){delete pcBuff;}
    };void func()
    {  int i;
       for(i=0;i<=8;i++)
          func1(clsA);
    }void func1(A clsA)
    {
       int i=0;
    }注意:当定义某类的对象时,同时以该类的对象为该对象的初值时,拷贝构造函数将会被调用.
      

  13.   

    没有自己的复制构造函数,另外你的delete 应为delete[]
      

  14.   

    很高兴有这么多人进来而且都说得有道理,本来我才疏学浅,让我又学到了不少一会儿我收贴了。thank you!!!
      

  15.   

    都是高手呀,我这个GREEN HAND 没什么好说的,只不过EFFECTIVE  C++ 上有一条说拥有指针的类一定得自定义一个拷贝构造函数和一个operator = ,对不对?