Доступ к функции защищенного члена! Ошибка сегментации (ядро сброшено)

Я пытаюсь использовать библиотеку OGDF C ++ для проекта и хочу использовать защищенную функцию-член класса этой библиотеки. As не может получить доступ к защищенным членам непосредственно вне класса или производного класса; чтобы использовать защищенный метод класса Balloon Layout, я создал класс A, который наследует класс BallonLayout, и из защищенной функции суперкласса вызывается в публичной функции «abc ()» класса A; так что я могу использовать 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

Решение

Ваш код:

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

не инициализирует указатель a, Разыменование нулевого или неинициализированного указателя с помощью * или же -> оператор, есть неопределенное поведение.

Оказывается, вам вообще не нужен указатель, просто используйте:

A a;
a.abc(G);

И если вам нужна динамически выделяемая память, включите <memory> и делать:

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

Ради любви к жизни, вселенной и всему, не используйте голые указатели, когда можете.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]