尝试学习指针时练习程序崩溃

时间:2016-05-28 02:56:29

标签: c++ pointers crash

我仍然在抓住指针的过程中并且这样做了一个快速无意义的程序,以便练习查找指针错误。我很困惑为什么这个示例代码崩溃了:

#include <iostream>

class VehiclePart
{
public:
    VehiclePart(int);

    int GetVehiclePartNumber();
private:
    int partNumber;
};

VehiclePart::VehiclePart(int VehiclePartNumber)
{
    partNumber = VehiclePartNumber;
}

int VehiclePart::GetVehiclePartNumber()
{
    return partNumber;
}

class Vehicle
{
public:
    Vehicle(VehiclePart* VehiclePart, int VehiclePartNumber);

    int GetVehiclePartNumber();

private:
    VehiclePart* vehiclePart;

};

Vehicle::Vehicle(VehiclePart* vehiclePart, int VehiclePartNumber)
{
    vehiclePart = new VehiclePart(VehiclePartNumber);
}

int Vehicle::GetVehiclePartNumber()
{
    return vehiclePart->GetVehiclePartNumber();
}

int main()
{
    VehiclePart* hood = nullptr;
    Vehicle car(hood, 6);

    std::cout << "Hello" << std::endl;

    std::cout << car.GetVehiclePartNumber();

    return 0;
}

我知道有更好的方法可以解决问题,就像我说这只是练习让我习惯指针以及为什么会发生崩溃。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

Vehicle::Vehicle(VehiclePart* vehiclePart, int VehiclePartNumber)
{

请注意,您的构造函数有一个名为vehiclePart的参数。因此,

    vehiclePart = new VehiclePart(VehiclePartNumber);

这最终将构造函数的参数设置为new ed类实例,而不是同名的类成员。

这与指针无关,但与范围有关。