我刚刚开始学习指针以及它们如何作为成员函数工作。我开始玩了一下,最终写了这么一小段代码:
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
,然后使用 *
取消引用它们,这是未定义的行为。
关于c++ - 将数字传递给成员函数导致程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31975186/