求助大佬!纠正bug
设计了一个矢量类。运行后,构造函数里声明element后element的地址是0xcccccccc。 然后出错无法读取该内存地址。这个错误有时候还会在拷贝构造函数里面出现。 不知道为什么拷贝构造函数被调用了。 请大佬纠正问题。
#include "stdafx.h"
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <cstdarg>
typedef class myvector
{
public:
myvector() //0参数构造函数
{
element=new double[3];
for (int i=0;i<3;i++)
element[i]=0;
}
myvector(int count,...) //N参数构造函数
{
N=count;
element=new double[N]; //这里出错 element地址为Oxccccccc//
va_list ap;
va_start (ap,count);
for (int i=0;i<N;i++)
{
element[i]=va_arg(ap,double);
}
va_end(ap);
}
myvector(const myvector& n) //拷贝构造函数
{
N=n.N;
if (element !=NULL)
delete[] element; //有时候这里出错。 同样element地址是0xcccccccc。 显示无法读取该内存地址//
element=new double[N];
for (int i=0;i<N;i++)
element[i]=n.element[i];
}
~myvector() //析构函数
{
delete[] element;
}
myvector operator + (const myvector& other) //重载+操作符
{
myvector result;
for (int i=0;i<N;i++)
result.element[i]=element[i]+other.element[i];
return result;
}
myvector operator - (const myvector& other) //重载-操作符
{
myvector result;
for (int i=0;i<N;i++)
result.element[i]=element[i]-other.element[i];
return result;
}
myvector operator * (int n) //重载*操作符(矢量*数)
{
myvector result;
for (int i=0;i<N;i++)
result.element[i]=element[i]*n;
return result;
}
void print() //输出函数
{
printf ("(");
for (int i=0;i<N;i++)
printf ("%.3f ",element[i]);
printf (")\n");
}
void SetDim(int i) //维度设置函数
{
N=i;
for (int j=0;j<N;j++)
element[j]=0;
}
public:
int N;
double * element;
}Vector;
int main()
{
int i;
Vector a(2,5.6,4.5),b(2,4.5,7.4);
Vector c;
c=a+b;
a.print();
b.print();
c.print();
scanf ("%d",&i);
return 0;
}