访问受保护的成员函数!分段故障(核心转储)

时间:2014-03-13 12:53:45

标签: c++ ogdf

我正在尝试将OGDF C ++库用于项目,并希望使用此库的类的受保护成员函数。由于无法直接访问类或派生类之外的受保护成员;使用Balloon Layout类的受保护方法我创建了一个继承BallonLayout类的A​​类,并从A类的公共函数“abc()”中调用了超类的受保护函数;这样我就可以在类之外使用abc()并间接保护BallonLayout类的功能。

在这里发布代码请告诉我它的问题在哪里。

#include <ogdf/basic/Graph.h>
#include <ogdf/basic/graph_generators.h>
#include <ogdf/misclayout/BalloonLayout.h>

using namespace ogdf;

class OGDF_EXPORT A : public BalloonLayout{
        public:
            void abc(const Graph &G){
            selectRoot(G);                
            }
};

int main()
{
    int n = 5, m = 7;
    Graph G;
    ogdf::planarBiconnectedGraph(G, n, m);

    A* a;
    a->abc(G);
    cout << "Done!!";
return 0;
}

它编译没有任何错误,但在运行时它给出“分段错误(核心转储)”。当我们尝试访问不在内存中的某些内容(对象/变量)时会出现此错误。但是没有弄到我做错了什么。

1 个答案:

答案 0 :(得分:0)

您的代码:

A* a;
a->abc(G);

不初始化指针a。使用*->运算符取消引用空或未初始化的指针是未定义的行为

原来,你根本不需要指针,只需使用:

A a;
a.abc(G);

如果您需要动态分配的内存,请包含<memory>并执行:

std::unique_ptr<A> a = new A(...);
a->abc(G);

对于对生命,宇宙和一切的热爱,尽可能不要使用裸指针。

相关问题