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....@gmail.com <mailto:bishop....@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@lists.osgeo.org <mailto:gdal-dev@lists.osgeo.org>
    http://lists.osgeo.org/mailman/listinfo/gdal-dev




--
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up | Frank Warmerdam, warmer...@pobox.com <mailto:warmer...@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
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to