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->3n", res.second ? "" : "not ");
return 0;
}
如果我取消add_edge, remove_edge行注释,段错误不会发生,程序打印预期的
G does not have an edge 1->3
但是有办法避免这种黑客行为吗?谢谢!
显然,如果需要,add_edge(1,3,G)
调用会向图添加顶点。你的第一个电话是在那个箱子里。然后将从顶点1到顶点3的边相加。请注意,在此调用之后,顶点的数量为4,因为顶点的索引从0到3。
随后对remove_edge(1,3,G)
的调用删除了刚刚添加的边,但保持顶点数量不变。
另一方面,对edge(1,3,G)
的调用并不向图中添加任何顶点,返回的布尔值用于声明顶点1和3是否连接。如果因为索引1和3的顶点不存在而删除了add_edge
,则存在访问冲突。
你可以简单地用想要的顶点数初始化图形:
graph_t G(4);
相关文章:
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 调试 CUDA MMU 故障
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 正在处理故障(堆芯转储)
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- C++函数过载会导致 SEG 故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 当新的故障时,是否有必要留出一些紧急内存?
- 基于 Chromium Edge 的 WebView2 不起作用
- Python & C-C++ 扩展模块案例段故障
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- 在 c++ 中,发生故障后是否需要 stream.clear()?
- Boost::edge导致段故障