繁体   English   中英

boost :: edge导致段错误

[英]boost::edge causing segfault

我正在尝试使用boost图库,当我尝试使用boost :: edge()时,我遇到了段错误。 完整的代码可以在这里找到 ,但在这里我已经制作了一个具有相同问题的最小程序(我正在使用“g ++ minimal.cpp”进行编译):

#include<stdio.h>
#include<boost/graph/adjacency_list.hpp>

using namespace boost;
using namespace std;

typedef adjacency_list<> graph_t;
typedef graph_traits<graph_t>::edge_descriptor edge_descriptor;

int main(){
    graph_t G;
    //add_edge(1,3,G);
    //remove_edge(1,3,G);
    pair<edge_descriptor, bool> res = edge(1,3,G);
    printf("G does %shave an edge 1->3\n", res.second ? "" : "not ");
    return 0;
}

如果我取消注释add_edge,remove_edge行,则不会发生段错误,程序会打印出预期的

G does not have an edge 1->3

但有没有办法避免这样的hackery? 谢谢!

显然, add_edge(1,3,G)调用会在需要时将顶点添加到图形中。 在那种情况下你的第一个电话。 然后它将顶点1的边添加到顶点3.注意,在此调用之后,顶点的数量是4,因为顶点随后从0索引到3。

随后对remove_edge(1,3,G)调用将删除刚刚添加的边,但保留顶点数不变。

另一方面edge(1,3,G)edge(1,3,G)的调用不会向图形添加任何顶点,如果顶点1和3连接或不连接,则返回中的布尔值表示状态。 有一个访问冲突是你删除add_edge因为索引1和3的顶点不存在。

您只需使用所需数量的顶点初始化图形:

graph_t G(4);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM