面向段错误的C ++新手

时间:2014-12-06 19:23:10

标签: c++ segmentation-fault

我刚刚开始学习C ++并尝试移植一些PHP代码。

我从这段代码中得到了一个段错误:

class Color {

public:

    // Props
    int r;
    int g;
    int b;
    int a;

    // Constructor
    Color (int r, int g, int b, int a) {
        this -> r = r;
        this -> g = g;
        this -> b = b;
        this -> a = a;
    };

    // Destructor
    ~Color () {
        delete this;
    };

    // Mix 2 colors
    void mixColor (const Color& c) {
        this -> r = (this -> r + c.r) / 2;
        this -> g = (this -> g + c.g) / 2;
        this -> b = (this -> b + c.b) / 2;
        this -> a = (this -> a + c.a) / 2;
    };
};

在主文件中:

int main () {

    Color myColor (10, 20, 30, 40);
    return 1;
}

知道导致它的原因吗?

感谢。

2 个答案:

答案 0 :(得分:1)

您应该只使用delete为您分配的内容致电new。您没有使用this分配new,因此您不应该在其上调用delete

答案 1 :(得分:1)

扩展目前的答案。

在这种情况下,您无法使用删除的原因是,不使用“' new'您在堆栈上创建对象的关键字,当它创建的范围不再相关时,它将自动销毁。

这对于您发布的对象非常有用,因为它很小,更重要的是,它不会在内部管理任何类型的内存,这可能会导致内存泄漏。

此外,由于类中的所有内容都是公共的,因此您可以考虑将其作为结构。