gpt4 book ai didi

c++ - 任何 GraphAttributes 函数调用上的 OGDF 段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:34 26 4
gpt4 key购买 nike

我刚开始使用 OGDF,并尝试通过运行 OGDF 网页上 How-Tos 下的一些示例来掌握它。我的代码可以编译,但是当我尝试在节点上调用 GraphAttributes 函数时出现段错误。

这是我的代码:

   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);
}

如果我注释掉我在评论中提到的导致段错误的行,程序运行正常而没有段错误。如果我然后查看写出的 .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.

当我在 GraphAttributes 上调用不同的函数时也会发生这种情况,例如 .idNode(v)。

有人能给我指出正确的方向吗?我现在绝对不明白这是从哪里来的,OGDF 太大了,只能浏览代码并理解它。 (至少对我而言)

非常感谢您!

最佳答案

不幸的是,您的问题不容易重现。

我的直觉是在从文件加载图形后初始化 GraphAttributes。

ogdf::Graph G;
if (!ogdf::GraphIO::readGML(G, "sierpinski_04.gml") ) {
std::cerr << "Could not load sierpinski_04.gml" << std::endl;
return 1;
}
ogdf::GraphAttributes GA(G, ogdf::GraphAttributes::nodeGraphics |
ogdf::GraphAttributes::nodeStyle |
ogdf::GraphAttributes::edgeGraphics );

或者在加载图形后调用 initAttributes。

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;
}

GA.initAttributes(ogdf::GraphAttributes::nodeGraphics |
ogdf::GraphAttributes::nodeStyle |
ogdf::GraphAttributes::edgeGraphics);

希望这对您有所帮助。

关于c++ - 任何 GraphAttributes 函数调用上的 OGDF 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com