在C ++中返回一个数组

时间:2015-08-09 21:40:53

标签: c++ arrays memory-management

我正在尝试学习C ++并且有一个关于在C ++中返回数组的问题。我知道在这种情况下,也许Vector可能更好,并且不需要getter方法,因为字段在同一个类中是可见的,但我正在尝试学习内存管理,所以我将使用它们。

class Color {
    double r;
    double g;
    double b;
    public:
    Color(int a, int aa, int aaa) {
        r = a;
        g = aa;
        b = aaa;
    }

    bool operator==(const Color &other) {
        double *otherCol = other.getter();
        return otherCol[0] == r && otherCol[1] == g && otherCol[2] == b;
    }

    double* getter() const {
        double second[3] = {r,g,b};
        return second;
    }
};

int main() {
    Color col1(23, 54, 200);
    Color col2(23, 54, 200);
    cout << (col1 == col2) << endl;
    return 0;
}

如果RGB颜色相同,此代码应打印出1,否则为0。但它没有打印1.要进行调试,我在operator==中的return语句之前添加了以下行(两次故意):

cout << otherCol[0] << " " << otherCol[1] << " " << otherCol[2] << endl;
cout << otherCol[0] << " " << otherCol[1] << " " << otherCol[2] << endl;

奇怪的是,结果不同:

23 54 200
6.91368e-310 6.91368e-310 3.11046e-317

有人可以告诉我是什么导致这种情况以及什么是不依赖于Vector或动态分配内存的合理补救措施?我们假设我们不想将数组传入getter()进行更新。

1 个答案:

答案 0 :(得分:1)

getter中,您将返回一个局部变量的地址,这会导致未定义的行为,因此您将获得随机内存。如果你返回一个指针,你必须在调用函数中执行new变量,并在函数返回后执行delete

或者你可以让second成为一个类成员,使其不会超出范围。

您也可以将数组作为参数传递。