我有這個任務,但這個程式不作業,輸出不正確。該程式編譯成功,但出現錯誤 - 分段錯誤(核心轉儲)。我不明白為什么會這樣。請告訴我下面代碼中的問題是什么 -
#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;
}
uj5u.com熱心網友回復:
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);
順便說一句,此代碼將導致記憶體泄漏。
uj5u.com熱心網友回復:
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;
}
這應該有效。
快樂編碼!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/402517.html
標籤:
上一篇:在C 中有什么方法可以為特定的引數值專門化一個函式模板
下一篇:在C 中獲取當前函式的回傳型別
