使用boost :: polygon进行分段错误

时间:2013-11-19 19:57:51

标签: c++ boost segmentation-fault polygon boost-polygon

我有处理过的多边形数据。现在我想看看我的处理数据与原始数据的匹配程度。对于此任务,我想使用BOOST的多边形集合运算符。 以下代码给了我一个段错误:

#include <iostream>
#include <boost/polygon/polygon.hpp>

using namespace boost::polygon::operators;
using namespace std;

typedef boost::polygon::polygon_data<double> BPolygon;
typedef boost::polygon::polygon_traits<BPolygon>::point_type BPoint;
typedef boost::polygon::polygon_set_data<double> BPolygonSet;
typedef std::vector<BPolygon> BPolygonVec;


double meassureError(BPolygonVec &polys1, BPolygonVec &polys2)
{
  BPolygonSet set1;
  BPolygonSet set2;

  assign(set1, polys1);
  assign(set2, polys2);

  return area(set1 ^ set2);
}

int main(int argc, char *argv[])
{
  BPolygonVec polys1;
  BPolygonVec polys2;

  loadPolysFromFile(polys1);
  loadPolysFromFile(polys2);

  cout << meassureError(polys1, polys2) << endl;
  return 0;
}

GDB-输出:

Program received signal SIGSEGV, Segmentation fault.
0x08156ce7 in std::list<boost::polygon::point_data<double>, std::allocator<boost::polygon::point_data<double> > >::begin (this=0x0) at /usr/include/c++/4.8.2/bits/stl_list.h:759
759           { return iterator(this->_M_impl._M_node._M_next); }

我的数据由大约2000个多边形组成,每个多边形大约有10个顶点,我希望有足够的内存来处理它。我究竟做错了什么?谢谢你的帮助!

1 个答案:

答案 0 :(得分:5)

来自文档:http://www.boost.org/doc/libs/1_55_0/libs/polygon/doc/index.htm

  

坐标数据类型是所有数据类型的模板参数   由图书馆提供的算法,预计是不可或缺的。   。不支持浮点坐标数据类型   由于事实而在库中实现的算法   实现浮点健壮性意味着一组不同的   关于浮动的算法和一般平台特定的假设   点表示。