使用 C++ 的向量静态乘法,程序不工作
Static Multiplication of Vector Using C++, Program not working
我得到了这个作业,但是这个程序不工作,输出不正确。该程序编译成功,但出现错误 - 分段错误(核心已转储)。我不明白为什么会这样。请告诉我下面代码中的问题是什么 -
#include<iostream>
using namespace std;
class Vector
{
int *V;
int size;
public:
Vector(int m)
{
V = new int[size=m];
for(int i=0; i< size; i++ )
{
V[i] = 0;
}
}
Vector(const int *a)
{
for(int i=0;i<size;i++)
{
V[i] = a[i];
}
}
int operator * (Vector &y)
{
int sum = 0;
for(int i=0;i<size;i++)
{
sum+= this->V[i] * y.V[i];
}
return sum;
}
void printVector()
{
for(int i=0;i<size;i++)
{
printf("%d\t",this->V[i]);
}
}
};
int main()
{
int x[3] = {1,2,3};
int y[3] = {4,5,6};
Vector V1(3);
Vector V2(3);
V1.printVector();
V2.printVector();
V1 = x;
V2 = y;
V1.printVector();
V2.printVector();
int r = V1*V2;
cout<<endl<<"r = "<<r<<endl;
}
Vector(const int *a)
不初始化Vector::V,用Vector(const int *a, int size) : Vector(size)
代替
但你必须更换
V1 = x;
V2 = y;
和
V1 = Vector(x,3);
V2 = Vector(y,3);
顺便说一句,这段代码会导致内存泄漏。
vector 的初始化不应该以这种方式完成。
V1 = x; // V1 is a Vector object, x is an Integer array
V2 = y;
这些行不初始化向量。
这是进行上述更改后的代码:
#include<iostream>
using namespace std;
class Vector
{
int *V;
int size;
public:
Vector(const int *a, int m)
{
V = new int[size=m];
for(int i=0; i< size; i++ )
{
V[i] = a[i];
}
}
int operator * (Vector &y)
{
int sum = 0;
for(int i=0;i<size;i++)
{
sum+= this->V[i] * y.V[i];
}
return sum;
}
void printVector()
{
for(int i=0;i<size;i++)
{
printf("%d\t",this->V[i]);
}
cout << endl;
}
};
int main()
{
int x[3] = {1,2,3};
int y[3] = {4,5,6};
Vector V1(x, 3);
Vector V2(y, 3);
V1.printVector();
V2.printVector();
int r = V1*V2;
cout<<endl<<"r = "<<r<<endl;
}
这应该有效。
编码愉快!
我得到了这个作业,但是这个程序不工作,输出不正确。该程序编译成功,但出现错误 - 分段错误(核心已转储)。我不明白为什么会这样。请告诉我下面代码中的问题是什么 -
#include<iostream>
using namespace std;
class Vector
{
int *V;
int size;
public:
Vector(int m)
{
V = new int[size=m];
for(int i=0; i< size; i++ )
{
V[i] = 0;
}
}
Vector(const int *a)
{
for(int i=0;i<size;i++)
{
V[i] = a[i];
}
}
int operator * (Vector &y)
{
int sum = 0;
for(int i=0;i<size;i++)
{
sum+= this->V[i] * y.V[i];
}
return sum;
}
void printVector()
{
for(int i=0;i<size;i++)
{
printf("%d\t",this->V[i]);
}
}
};
int main()
{
int x[3] = {1,2,3};
int y[3] = {4,5,6};
Vector V1(3);
Vector V2(3);
V1.printVector();
V2.printVector();
V1 = x;
V2 = y;
V1.printVector();
V2.printVector();
int r = V1*V2;
cout<<endl<<"r = "<<r<<endl;
}
Vector(const int *a)
不初始化Vector::V,用Vector(const int *a, int size) : Vector(size)
但你必须更换
V1 = x;
V2 = y;
和
V1 = Vector(x,3);
V2 = Vector(y,3);
顺便说一句,这段代码会导致内存泄漏。
vector 的初始化不应该以这种方式完成。
V1 = x; // V1 is a Vector object, x is an Integer array
V2 = y;
这些行不初始化向量。
这是进行上述更改后的代码:
#include<iostream>
using namespace std;
class Vector
{
int *V;
int size;
public:
Vector(const int *a, int m)
{
V = new int[size=m];
for(int i=0; i< size; i++ )
{
V[i] = a[i];
}
}
int operator * (Vector &y)
{
int sum = 0;
for(int i=0;i<size;i++)
{
sum+= this->V[i] * y.V[i];
}
return sum;
}
void printVector()
{
for(int i=0;i<size;i++)
{
printf("%d\t",this->V[i]);
}
cout << endl;
}
};
int main()
{
int x[3] = {1,2,3};
int y[3] = {4,5,6};
Vector V1(x, 3);
Vector V2(y, 3);
V1.printVector();
V2.printVector();
int r = V1*V2;
cout<<endl<<"r = "<<r<<endl;
}
这应该有效。
编码愉快!