[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