我正在尝试将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;
}
它编译没有任何错误,但在运行时它给出“分段错误(核心转储)”。当我们尝试访问不在内存中的某些内容(对象/变量)时会出现此错误。但是没有弄到我做错了什么。
答案 0 :(得分:0)
您的代码:
A* a;
a->abc(G);
不初始化指针a
。使用*
或->
运算符取消引用空或未初始化的指针是未定义的行为。
原来,你根本不需要指针,只需使用:
A a;
a.abc(G);
如果您需要动态分配的内存,请包含<memory>
并执行:
std::unique_ptr<A> a = new A(...);
a->abc(G);
对于对生命,宇宙和一切的热爱,尽可能不要使用裸指针。