我刚开始学习指针以及它们如何作为成员函数工作。我开始玩了一下,最后写了一小段代码:
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,是否真的没有准备好要使用的指针?
答案 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)对它们进行解除反映。