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

Passing a number into member function causes program crash

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

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 从未分配过地址吗?如果是这样,那是否意味着将itsAge初始化为0,并没有真正准备好要使用的指针?

将您的程序重写为:

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

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

不需要指点。仅供参考,您的程序正在崩溃,因为您正在将这些指针初始化为 0,然后使用 * 取消引用它们,这是未定义的行为。