[geos-devel] Encounter Segmentation Fault with GEOS 2.2.2

Sheng Liang (SH/CBC) sheng.liang at ericsson.com
Mon Jun 26 00:07:48 EDT 2006


HI:
  I have tried aString1.c_str(), but I still get the same
error. And I even use such code:
   GEOSGeom aPolygon1,aPolygon2;
   const char *aString1 = "POLYGON ((125.331 0,3.35823e-06
125.331,-125.331 6.71646e-06,-1.00747e-05 -125.331,125.331 0))";

   const char *aString2 = "POLYGON ((245.331 120,120 245.331,-5.331
120,120 -5.331,245.331 120))";

        
   aPolygon1 = GEOSGeomFromWKT(aString1);
   aPolygon2 = GEOSGeomFromWKT(aString2);
        
   GEOSGeom anIntersection = GEOSIntersection(aPolygon1,aPolygon2);  

And the error is the same.
  Regards

-----Original Message-----
From: geos-devel-bounces at geos.refractions.net
[mailto:geos-devel-bounces at geos.refractions.net] On Behalf Of Mateusz
Loskot
Sent: Monday, June 26, 2006 11:49
To: GEOS Development List
Subject: Re: [geos-devel] Encounter Segmentation Fault with GEOS 2.2.2

Sheng Liang (SH/CBC) wrote:
> Hi: I encountered an error of "Segmentation Fault" with GEOS 2.2.2.
> What I am doing is to get intersection of two polygons. The error 
> happens to the specific polygong: POLYGON ((125.331 0,3.35823e-06
> 125.331,-125.331 6.71646e-06,-1.00747e-05 -125.331,125.331 0)) and 
> POLYGON ((245.331 120,120 245.331,-5.331 120,120 -5.331,245.331 120))

> There is no error to others polygons. So I think it must be an error 
> of GEOS 2.2.2 code.
> 
> My code is : GEOSGeom aPolygon1,aPolygon2; string aString1("POLYGON
> ((125.331 0,3.35823e-06 125.331,-125.331 6.71646e-06,-1.00747e-05
> -125.331,125.331 0))");
> 
> string aString2("POLYGON ((245.331 120,120 245.331,-5.331 120,120
> -5.331,245.331 120))");
> 
> aPolygon1 = GEOSGeomFromWKT(aString1.data());
> aPolygon2 = GEOSGeomFromWKT(aString2.data());

I'm suer in 99% that the problem is in your code above.
You should not access internal buffer of std::string with data() member
function. It should be used in very rare cases because it breaks OOP
rule of encapsulation! It's available only for C compatibility.

GEOSGeomFromWKT expects to get const char* :
Geometry *GEOSGeomFromWKT(const char *wkt);

so, you should call it as follows:

aPolygon1 = GEOSGeomFromWKT(aString1.c_str());

std::string::c_str() returns const char*.

Cheers
--
Mateusz Loskot
http://mateusz.loskot.net
_______________________________________________
geos-devel mailing list
geos-devel at geos.refractions.net
http://geos.refractions.net/mailman/listinfo/geos-devel



More information about the geos-devel mailing list