我有一个带有数组和大小字段的Vector类。当两个数组v1和v2中的每一个都具有多个元素时,就会出现内存分配问题,因为这会阻碍复制操作符。我该如何解决?这是一个代码:

#include<iostream>
using namespace std;

class Vector
{
private:
    unsigned size;
    double *arr;
public:
    Vector();
    Vector(double *arr, unsigned size);
    Vector(const Vector &copy);
    Vector &operator= (const Vector &vector);
    friend Vector operator+ (const Vector &varLeft, const Vector &varRight);
    friend ostream & operator<< (ostream &output, const Vector &var);
    friend istream & operator>> (istream &input, Vector &var);
};

int unitTest();

int main()
{
    unitTest();

    system("pause");
    return 0;
}
int unitTest()
{
    Vector v1;
    cin >> v1;
    Vector v2;
    cin >> v2;
    Vector v3;

    cout << "Your Vector v1:" << endl;
    cout << v1 << endl;
    cout << "Your Vector v2:" << endl;
    cout << v2 << endl;

    cout << "Arrays +:" << endl;
    v3 = v1 + v2;
    cout << v3 << endl;

    return 0;
}
    Vector::Vector()
    {
        arr = new double[size];
    };

Vector::Vector(double *arr, unsigned size) : size(size)
{
    arr = new double[size];
    for (int i = 0; i < size; ++i)
    {
        this->arr[i] = arr[i];
    }
};

当operator +返回值时,我的程序在“arr = new double [size];”行之后崩溃。在复制运算符中。
Vector::Vector(const Vector &copy)
{
    size = copy.size;
    arr = new double[size];
    for (int i = 0; i < size; ++i)
    {
        arr[i] = copy.arr[i];
    }
}
Vector operator+ (const Vector &varLeft, const Vector &varRight)
{
    Vector res;
    res.size = varLeft.size;

    if (varLeft.size == varRight.size)
    {
        for (int i = 0; i < res.size; ++i)
        {
            res.arr[i] = varLeft.arr[i] + varRight.arr[i];
        }
    }
    else
    {
        cout << "Error. Vectors have different size." << endl;
    }
    return res;
}
ostream & operator<< (ostream &output, const Vector &var)
{
    for (int i = 0; i < var.size; ++i)
    {
        output << ' ';
        output << var.arr[i];
    }
    output << endl;
    return output;
}

istream & operator>> (istream &input, Vector &var)
{
    cout << "Enter size of array --> ";
    input >> var.size;
    var.arr = new double[var.size];
    for (int i = 0; i < var.size; ++i)
    {
        cout << "Enter " << i + 1 << " element --> ";
        input >> var.arr[i];
    }
    return input;
}
Vector & Vector::operator= (const Vector &vector)
{
   if (this != &vector)
   {
        if (arr != 0)
        {
            delete[]arr;
        }
        size = vector.size;
        arr = new double[size];

        for (int i = 0; i < size; ++i)
        {
            arr[i] = vector.arr[i];
        }
    }
    return *this;
}

最佳答案

您永远不会在默认构造函数中初始化Vector::size,因此程序的行为是不确定的。您需要在分配数组之前初始化Vector的大小。

另外,对于您的operator+,您将需要添加采用大小的Vector构造函数,或者在更改res的大小后重新分配数组。

关于c++ - 在C++中使用运算符new []后崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42468457/

10-11 23:14
查看更多