C++对象类数组创建与释放问题。。。。

#include<iostream>
using namespace std;
int i=0;
class CVector
{
private:
float* p_val;
int size;
public:
CVector(float *,int s);
CVector(const CVector &v);
~CVector();
CVector& operator = (const CVector &v); //赋值运算符重载
float& operator[] (int ix); //下标运算符重载
void display();
};
CVector::CVector(float *p,int s)
{
size=s;
p_val=new float[size];
for(i;i<size;i++)
p_val[i]=p[i];
}
CVector::CVector(const CVector &v)
{
size=v.size;
p_val=new float[v.size];
for(i=0;i<size;i++)
p_val[i]=v.p_val[i];
}
CVector:: ~CVector()
{
delete []p_val;
}
CVector & CVector::operator =(const CVector &v)
{
delete []p_val;
size=v.size;
p_val=new float[v.size];
for(i=0;i<size;i++)
p_val[i]=v.p_val[i];
return *this;
}

float & CVector:: operator [] (int ix)
{
if(ix>=0 && ix<size)
return p_val[ix-1];
else
exit(1);
}
void CVector::display()
{
for(i=0;i<size;i++)
cout<<p_val[i]<<" ";
cout<<endl;
}
int main()
{
float a[5]={1,2,3,4,5},b[5]={6,7,8,9,10};
CVector c1(a,5),c2(c1),c3(b,5);
cout<<"对象c1: ";
c1.display();
cout<<"对象c2:";
c2.display();
cout<<"c2=c3后,对象c2: ";
c2=c3;
c2.display(); // 这里为什么输出的是乱码?如下图
cout<<"c1[3]= ";
cout<<c1[3]<<endl;
return 0;
}

你的i有问题,它是一个全局变量,在你的CVector::CVector(float *p,int s)的for循环里却并没有给它初始值。这样的话如果有的东西初始化过了,那么再进入这个构造函数的话i的初始值是大于5的并不会对数组进行复制。

推荐的解决办法是不要使用全局变量。在每个for循环中使用
for(int i=0;i<size;++i)
这样的形势。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答