[gdal-dev] VS2010-VS2013 s57
Dmitriy Baryshnikov
bishop.dev at gmail.com
Wed Dec 4 13:15:58 PST 2013
Hi Frank,
You quite right, what
It is not clear to me why this should be necessary. osAcronym is a
long lived std::string (well CPLString derived from std::string)
living in the registrars attribute list. I assume the following
method is used to convert the CPLString to "const char *" which
should amount to the same thing you did.
but this is not helps, as c_str() method of std::string not return
pointer, but construct new zero ended const char* managed by std::string
(maybe this is specific to VS2010-VS2013). This const char* cleared
after some call to std::string or CPLString and we got empty (cleared)
const char *pszAcronym. I think the VS2010-VS2013 compiler do this in
getter by index, operator const char* or the whole GetAttrInfo(i) ==
NULL ? NULL : aoAttrInfos[i]->osAcronym (maybe MS change the order
parameter calculation or optimization). Maybe const (operator const
char* (void) const) in non const (const char *GetAttrAcronym( int i ))
function VS2010-VS2013 specific behaviour.
OK, I fire the ticket. As I have committer rights, my I add changes,
corresponding to the ticket?
Best regards,
Dmitry
05.12.2013 0:19, Frank Warmerdam пишет:
> Dmitriy,
>
> It is not clear to me why this should be necessary. osAcronym is a
> long lived std::string (well CPLString derived from std::string)
> living in the registrars attribute list. I assume the following
> method is used to convert the CPLString to "const char *" which should
> amount to the same thing you did.
>
> operator const char* (void) const { return c_str(); }
>
> Perhaps there is some subtle reason I don't see that the compiler is
> creating a temporary std::string in between?
>
> In any event, if you file a ticket I can apply this change upstream.
> There are other accessors on the same class that look like they could
> have similar issues.
>
> Best regards,
> Frank
>
>
> On Wed, Dec 4, 2013 at 12:11 PM, Dmitriy Baryshnikov
> <bishop.dev at gmail.com <mailto:bishop.dev at gmail.com>> wrote:
>
> Hi,
>
> I have such error: the GDAL compiled with VS2010-VS2013 in s57
> driver loose all additional fields values. But the same code
> compiled with gcc or previous VS works fine.
> I found the root of problems here
> (ogr\ogrsf_frmts\s57\s57reader.cpp:932):
>
> const char *pszAcronym = poRegistrar->GetAttrAcronym(nAttrId);
> iField = poFeature->GetDefnRef()->GetFieldIndex(pszAcronym);
>
> The pszAcronym always empty.
>
> The problem comes from this function (ogr\ogrsf_frmts\s57\s57.h:140):
>
> const char *GetAttrAcronym( int i )
> { return GetAttrInfo(i) == NULL ? NULL :
> aoAttrInfos[i]->osAcronym; }
>
> It seems to me that during execution this function I have
> |situation when||c_str()|result becomes invalid
> (the|std::string|is destroyed or a non-const member function of
> the string is called).
>
> If I change function
>
> const char *GetAttrAcronym( int i )
> { return GetAttrInfo(i) == NULL ? NULL :
> aoAttrInfos[i]->osAcronym.c_str(); }
>
> the problem gone.
>
> So I need some confirmation/verification my ideas.
> If I'm right, I can make changes to s57 driver.
>
> Best regards,
> Dmitry
>
>
>
> ------------------------------------------------------------------------
> <http://www.avast.com/>
>
> Это сообщение свободно от вирусов и вредоносного ПО благодаря
> avast! Antivirus <http://www.avast.com/> защита активна.
>
>
>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org <mailto:gdal-dev at lists.osgeo.org>
> http://lists.osgeo.org/mailman/listinfo/gdal-dev
>
>
>
>
> --
> ---------------------------------------+--------------------------------------
> I set the clouds in motion - turn up | Frank Warmerdam,
> warmerdam at pobox.com <mailto:warmerdam at pobox.com>
> light and sound - activate the windows | http://pobox.com/~warmerdam
> <http://pobox.com/%7Ewarmerdam>
> and watch the world go round - Rush | Geospatial Software Developer
---
Это сообщение свободно от вирусов и вредоносного ПО благодаря защите от вирусов avast!
http://www.avast.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20131205/92f9099f/attachment-0001.html>
More information about the gdal-dev
mailing list