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

标签 c++ class pointers pointer-to-member

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

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/

相关文章:

c - C 中的交换问题 [初学者]

c++ - std::unique_ptr 的自定义删除器规范

java - 如何使用通用整数在类中创建整数对象

c++ - 如何使用智能指针跟踪类的对象?

ios - 对对象的引用返回 null(iOS 类继承)

class - 为什么可以在类型字段中混入类?

c - 函数中使用的内存何时会空闲??(C 编程)

c++ - Mac 上的 Qt Creator 和 boost 库

c++ - 在 C++ 中绘图

c++ - 基本 C++ 字符串指针