Segmentation Fault调用成员函数

时间:2014-08-05 07:27:24

标签: c++

#include <iostream>

using namespace std;

class x { };

class y : virtual public x
{
public:
    virtual void f1() { cout << "woekd"; };
protected:
    y();
    ~y();
};

class z : virtual public y
{
public:
    virtual void f1() { cout << "woekd"; }
protected:
    z();
    ~z();
};

class saa : virtual public z
{
public:
    virtual void f1();
protected:
    saa();
    ~saa();
};

int main()
{
    saa *a1 ;
    a1->y::f1();
}

2 个答案:

答案 0 :(得分:0)

a1是一个未初始化的指针。它并不指向任何地方。使用它会导致不确定的行为。

您只能取消引用指向有效对象的指针。

在您的示例代码中,实际上无法创建saa,因为它具有受保护的构造函数。您必须从saa派生一个类,创建该实例,然后使a1指向该实例。

答案 1 :(得分:0)

您没有初始化a1 ...所以取消引用它有未定义的行为。

使用运算符new或在stak上分配。