使用 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;
    }

这应该有效。

编码愉快!