3

私は OGDF を使い始めたばかりで、OGDF Web ページの How-Tos にあるいくつかの例を実行してコツをつかもうとしています。コードはコンパイルされますが、ノードで GraphAttributes 関数を呼び出そうとすると segfault が発生します。

ここに私のコード:

   ogdf::Graph G;
   ogdf::GraphAttributes GA(G);

   if (!ogdf::GraphIO::readGML(G, "sierpinski_04.gml") ) {
      std::cerr << "Could not load sierpinski_04.gml" << std::endl;
      return 1;
   }


   ogdf::node v;

   GA.setAllHeight(10.0);
   GA.setAllWidth(10.0);

   ogdf::FMMMLayout fmmm;

   fmmm.useHighLevelOptions(true);
   fmmm.unitEdgeLength(15.0);
   fmmm.newInitialPlacement(true);
   //fmmm.qualityVersusSpeed(ogdf::FMMMLayout::qvsGorgeousAndEfficient);

   fmmm.call(GA);
   ogdf::GraphIO::writeGML(GA, "sierpinski_04-layout.gml");

   for(v=G.firstNode(); v; v=v->succ()) {
      std::cout << v << std::endl;
      //the following line causes the segfault
      double xCoord = GA.x(v);
   }

コメントで言及した行をコメントアウトすると、segfault が発生し、プログラムは segfault なしで正常に実行されます。次に、書き出された .gml ファイルを調べると、ノードには x 座標と y 座標があります。次のメッセージが表示されます。

MT: /home/work/lib/OGDF-snapshot/include/ogdf/basic/NodeArray.h:174: T& ogdf::NodeArray<T>::operator[](ogdf::node) [with T = double; ogdf::node = ogdf::NodeElement*]: Assertion `v->graphOf() == m_pGraph' failed.

.idNode(v) のように、GraphAttributes で別の関数を呼び出したときにも発生します。

なぜこれが起こっているのか、誰かが私を正しい方向に向けることができますか? これがどこから来ているのか、今では絶対に理解できません.OGDFは、コードを見て理解するには大きすぎます. (少なくとも私にとっては)

事前にどうもありがとうございました!

4

2 に答える 2