将数字传递给成员函数导致程序崩溃
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
,然后使用 *
取消引用它们,这是未定义的行为。
我刚开始学习指针以及它们如何作为成员函数工作。我开始玩了一下,最终写了这么一小段代码:
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
,然后使用 *
取消引用它们,这是未定义的行为。