[geos-devel] Encounter Segmentation Fault with GEOS 2.2.2

Sheng Liang (SH/CBC) sheng.liang at ericsson.com
Tue Jun 27 21:15:25 EDT 2006


Hi:
  Yes. I have called initGEOS() before I create those GEOSGeom.
As I said, if I provide some other polygons, there is no fault.
The fault just happened to these two specific polygons.

  Regards 

-----Original Message-----
From: geos-devel-bounces at geos.refractions.net
[mailto:geos-devel-bounces at geos.refractions.net] On Behalf Of
strk at refractions.net
Sent: Tuesday, June 27, 2006 23:45
To: GEOS Development List
Subject: Re: [geos-devel] Encounter Segmentation Fault with GEOS 2.2.2

Did you call initGEOS() ?
That's currently *required* (might change in the future)

--strk;

On Mon, Jun 26, 2006 at 12:07:48PM +0800, Sheng Liang (SH/CBC) wrote:
> 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
> _______________________________________________
> geos-devel mailing list
> geos-devel at geos.refractions.net
> http://geos.refractions.net/mailman/listinfo/geos-devel

-- 

 /"\    ASCII Ribbon Campaign
 \ /    Respect for low technology.
  X     Keep e-mail messages readable by any computer system.
 / \    Keep it ASCII. 

_______________________________________________
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