[gdal-dev] Losing access to dataset variables. Am I doing something really dumb?

Jorge Arevalo jorgearevalo at libregis.org
Mon Aug 11 15:35:24 PDT 2014


Hello,

I have a stupid mistake in my code. This is the problem (very simplified):

postgisrasterdataset.cpp

PostGISRasterDataset::IRasterIO(....)
{
    // Two attributes of my class, that inherits from GDALDataset
    pszAttribute = CPLStrdup("foo");
    pszAttribute2 = CPLStrdup("bar");

    // Just delegates in default implementation
    return GDALDataset::IRasterIO(...);
}


postgisrasterrasterband.cpp

PostGISRasterRasterBand::IRasterIO(....)
{
    // Get pointer to dataset this rasterband belongs to
    PostGISRasterDataset * poRDS = (PostGISRasterDataset *)poDS;

    // Do some stuff with poRDS->pszAttribute and poRDS->pszAttribute2
    // They're private vars, but PostGISRasterRasterBand and
    // PostGISRasterDataset are friends. No problem here.

    // Delegates in default implementation. So, this will result, at the
end, in calls
    // to my implementation of IReadBlock / IWriteBlock
    return GDALRasterBand::IRasterIO(...);
}


PostGISRasterRasterBand::IWriteBlock(...)
{
    // Get pointer to dataset this rasterband belongs to
    PostGISRasterDataset * poRDS = (PostGISRasterDataset *)poDS;

    // Try to work with poRDS->pszAttribute and poRDS->pszAttribute2, but
    // fails because they are NULL. Why??
}

Weirdest thing is the rest of cuestom attributes of my PostGISRasterDataset
class are accessible. And, of course, the poRDS pointer is always the same
(same mem address). Only problem is with those char * attributes. Looks
like they're freed at some point  (or I'm doing something really wrong from
the point of view of C++, and I deserve a severe punishment for that).

Any clues?

Best regards,

-- 
Jorge Arevalo

http://about.me/jorgeas80
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20140812/f3941f01/attachment.html>


More information about the gdal-dev mailing list