以下代码在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;
}
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;
}
解决方案 »
- 看看干什么用的
- C++ main的返回类型为int,而不能为ui(注:结构体)。求解,求解
- 显示图形在一个固定大小的区域内,如何隐藏超出部分
- 手机QQ是用udp 还是tcp通信
- carray中嵌套着包含carray的复杂类,是否可以?
- 能否使用过一个文件比如txt. wav等文件后通过程序删除调该文件?
- 求<ATL 开发指南>电子书
- 串口通信的超时结构的问题,在线等(云台控制)
- 谁能告诉我gcc到底是什么?
- 请高手指点:ADO ver 3.51 以上的CDynamicAccessor::GetValue(long nColumn,ctype* pData)中的ctype 的用法
- 不是很难吧
- 一个IDL文件的编译问题
void func()
{ int i;
A *clsA=new A;
for(i=0;i<=8;i++)
func1(*clsA);
}
{ int i;
for(i=0;i<=8;i++)
func1(clsA);//这里错误
}
异常跳出
为什么会出现异常终止??
2,func1没有返回类型
3类定义有点问题
退出时的析构。虽然
for(i=0;i<=8;i++)
func1(clsA)发生了9次这样的操作。但析构时
只delete了一个字节的内存。泄漏了99字节内存。
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);
}
....
}
A(A& a)
{
pcBuff = new char[100];
memcpy(pcBuff, a.pcBuff, 100);
}
{
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;
}注意:当定义某类的对象时,同时以该类的对象为该对象的初值时,拷贝构造函数将会被调用.