On Sat, 1 Aug 2020, Andrew Bell wrote:

Thanks for the hint.
I had assumed that the caller was taking responsibility for it.

Seems like it would depend on what you're doing with the pointer after you
return it.

On Sat, Aug 1, 2020, 5:50 AM Andrew C Aitchison <and...@aitchison.me.uk>
wrote:


I would like to define GetSpatialRef() for my raster driver as something
like:

     const OGRSpatialReference* GetSpatialRef() const override {
         OGRSpatialReference* poSRS = new OGRSpatialReference();
         if (poSRS->importFromEPSGA(27700)!=OGRERR_NONE)
         {
             delete poSRS;
             poSRS = nullptr;
         }
         return poSRS;
     }

Unfortunately, valgrid reports that this leaks in the "new"
on the line
    OGRSpatialReference* poSRS = new OGRSpatialReference();

On the other hand,

     const OGRSpatialReference* GetSpatialRef() const override {
         return new OGRSpatialReference("EPSG:27700");
     }

is no better:
==117785==
==117785== HEAP SUMMARY:
==117785==     in use at exit: 5,764 bytes in 24 blocks
==117785==   total heap usage: 7,363 allocs, 7,339 frees, 1,213,218 bytes
allocated
==117785==
==117785== Searching for pointers to 24 not-freed blocks
==117785== Checked 3,635,216 bytes
==117785==
==117785== 596 (16 direct, 580 indirect) bytes in 1 blocks are definitely
lost in loss record 14 of 16
==117785==    at 0x483BE63: operator new(unsigned long)
(vg_replace_malloc.c:344)
==117785==    by 0x5E1D765: VRCDataset::GetSpatialRef() const (VRC.h:154)
==117785==    by 0x4ED723A: GDALInfo (gdalinfo_lib.cpp:333)
==117785==    by 0x10954D: main (gdalinfo_bin.cpp:213)
==117785==
==117785== 596 (16 direct, 580 indirect) bytes in 1 blocks are definitely
lost in loss record 15 of 16
==117785==    at 0x483BE63: operator new(unsigned long)
(vg_replace_malloc.c:344)
==117785==    by 0x5E1D765: VRCDataset::GetSpatialRef() const (VRC.h:154)
==117785==    by 0x4ED9203: GDALInfo (gdalinfo_lib.cpp:578)
==117785==    by 0x10954D: main (gdalinfo_bin.cpp:213)
==117785==
==117785== LEAK SUMMARY:
==117785==    definitely lost: 32 bytes in 2 blocks
==117785==    indirectly lost: 1,160 bytes in 10 blocks
==117785==      possibly lost: 0 bytes in 0 blocks
==117785==    still reachable: 4,572 bytes in 12 blocks
==117785==         suppressed: 0 bytes in 0 blocks

This is with both gdal 3.0.4 and 3.1.2 on Ubunto 20.04.

--
Andrew C. Aitchison                                     Kendal, UK
                        and...@aitchison.me.uk
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev


--
Andrew C. Aitchison                                     Kendal, UK
                        and...@aitchison.me.uk
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to