首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问受保护的成员函数!分段故障(核心转储)

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

Stack Overflow用户
提问于 2014-03-13 20:53:45
回答 1查看 523关注 0票数 1

我正在尝试为一个项目使用OGDF C++库,并且希望使用这个库的一个类的受保护的成员函数。As不能直接在类或派生类外部访问受保护的成员;为了使用气球布局类的受保护方法,我创建了一个类A,它继承了BallonLayout类,并在类A的公共函数" abc()“中调用了超类的受保护函数;这样我就可以在类的外部使用abc(),并间接地调用类BallonLayout的受保护函数。

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

代码语言:javascript
复制
#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;
}

它编译时没有任何错误,但在运行时它给出了“分段错误(核心转储)”。当我们试图访问不在内存中的东西(对象/变量)时,就会出现这个错误。但不明白我到底犯了什么错。

EN

回答 1

Stack Overflow用户

发布于 2014-03-14 04:20:49

你的代码:

代码语言:javascript
复制
A* a;
a->abc(G);

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

代码语言:javascript
复制
A a;
a.abc(G);

如果你需要动态分配内存,包括<memory>和do:

代码语言:javascript
复制
std::unique_ptr<A> a = new A(...);
a->abc(G);

为了对生活、宇宙和一切事物的热爱,尽可能不要使用裸体指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22389799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档