logo       

RE: Encounter Segmentation Fault with GEOS 2.2.2: msg#00072

gis.geos.devel

Subject: RE: Encounter Segmentation Fault with GEOS 2.2.2

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@xxxxxxxxxxxxxxxxxxxx
[mailto:geos-devel-bounces@xxxxxxxxxxxxxxxxxxxx] 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@xxxxxxxxxxxxxxxxxxxx
http://geos.refractions.net/mailman/listinfo/geos-devel


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise