将数字传递给成员函数会导致程序崩溃

时间:2015-08-12 20:52:39

标签: c++ class pointers member-function-pointers

我刚开始学习指针以及它们如何作为成员函数工作。我开始玩了一下,最后写了一小段代码:

class Animal
{
private:
    int *itsAge = 0;
    int *itsWeight = 0;

public:
    void SetAge(int age) { *itsAge = age; };
    int GetAge() { return *itsAge; };
};



int main() {

    Animal Lion;
    Lion.SetAge(3);
    cout << Lion.GetAge();

    return 0;

};

我的问题是为什么我的程序在运行时会崩溃?在我看来,我将值3传递给SetAge()函数。然后,将值3的副本存储在age中,然后将其分配给指针itsAge的值。是因为它的年龄从未被分配过地址吗?如果是这样,这是否意味着将itsAge初始化为0,是否真的没有准备好要使用的指针?

1 个答案:

答案 0 :(得分:4)

将您的程序改写为:

struct Animal {
    int age = 0;
    int weight = 0;
};

int main() {
    Animal lion;
    lion.age = 3;
    std::cout << lion.age;
    return 0;
};

不需要指针。仅供您参考,因为您正在初始化指向0的指针,然后使用*(即未定义的Bevahiour)对它们进行解除反映。