只是一个很小的程序测试geos库里的touch和intersection算子,可是不知道为什么老出错,请教高手指点迷津。下面是程序:         PrecisionModel *pm = new PrecisionModel();
         GeometryFactory * global_factory= new GeometryFactory(pm);
CoordinateSequence *cl = new CoordinateArraySequence();
cl->add(Coordinate(100,100));
cl->add(Coordinate(100,200));
cl->add(Coordinate(200,200));
cl->add(Coordinate(200,100));
cl->add(Coordinate(100,100));
LinearRing *lr = global_factory->createLinearRing(cl);
         geos::geom::Polygon *poly=NULL;
poly = global_factory->createPolygon(lr,NULL);      CoordinateSequence *cr = new CoordinateArraySequence();
cr->add(geos::geom::Coordinate(150, 150));
cr->add(geos::geom::Coordinate(150, 250));
cr->add(geos::geom::Coordinate(250, 250));
cr->add(geos::geom::Coordinate(250, 150));
cr->add(geos::geom::Coordinate(150, 150)); LinearRing *li = global_factory->createLinearRing(cr);
geos::geom::Polygon *poly1=global_factory->createPolygon(li,NULL);   geos::geom::Geometry *poly2; 
BOOL test;
geos::geom::Geometry *g1=poly;
geos::geom::Geometry *g2=poly1;
 
test=g2->touches(g2);    //出现非法访问错误
poly2=g1->intersection(g2);  //出现buffer overrun错误
global_factory->destroyGeometry(lr);
global_factory->destroyGeometry(li);
if (cr)
{
delete cr;
cr=NULL;
}
if (cl)
{
delete cl;
cl=NULL;
}
global_factory->destroyGeometry(poly);
global_factory->destroyGeometry(poly1);
global_factory->destroyGeometry(poly2);
delete pm;   编译时没有错误,只是每次运行到touch和intersection算法时就出错。前面创建LinearRing已经测试过了,数据确实传递进去了,没有问题。创建Polygon时如果第二个参数传递非NULL时会提示非法访问,设为NULL后Polygon可以创建成功,只是算法为什么不能用呢?
   考虑了很久也上网查了很多资料还是不知道问题出在哪里。有没有用过的高人能告诉我问题在哪,要不然真是要崩溃了呀。