我正在尝试为一个项目使用OGDF C++库,并且希望使用这个库的一个类的受保护的成员函数。As不能直接在类或派生类外部访问受保护的成员;为了使用气球布局类的受保护方法,我创建了一个类A,它继承了BallonLayout类,并在类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;
}它编译时没有任何错误,但在运行时它给出了“分段错误(核心转储)”。当我们试图访问不在内存中的东西(对象/变量)时,就会出现这个错误。但不明白我到底犯了什么错。
发布于 2014-03-14 04:20:49
你的代码:
A* a;
a->abc(G);不初始化指针a。使用*或->运算符取消引用空指针或未初始化的指针是未定义的行为。
A a;
a.abc(G);如果你需要动态分配内存,包括<memory>和do:
std::unique_ptr<A> a = new A(...);
a->abc(G);为了对生活、宇宙和一切事物的热爱,尽可能不要使用裸体指针。
https://stackoverflow.com/questions/22389799
复制相似问题