Hi,
I think that I found the way to debug and the trace makes me ask a question 
that can be interesting to everybody who uses python and it's not an expert, 
like me.

In my test I do:
ds = gdal.OpenEx("data/miramon/Polygons/SimplePolygons/SimplePolFile.pol")
lyr = ds.GetLayer(0)
assert lyr is not None, "Failed to get layer"
assert lyr.GetFeatureCount() == 3
assert lyr.GetGeomType() == ogr.wkbPolygon
f = lyr.GetNextFeature()

And at that moment there is a backtrace available:
#9  0x00007ffff4b3d86c in CPLRealloc (pData=0x0, nNewSize=667227037326010464) 
at /gdal/port/cpl_conv.cpp:280
#10 0x00007ffff5cb638a in MMResizeMiraMonPolygonArcs (pFID=0x555556456358, 
nMax=0x555556456348,
    nNum=4653387708260263558, nIncr=0, nProposedMax=0) at 
/gdal/ogr/ogrsf_frmts/miramon/mm_wrlayr.c:4464
#11 0x00007ffff5cc33e4 in MMGetMultiPolygonCoordinates 
(hMiraMonLayer=0x555556446fd0, i_pol=1, flag_z=0)
    at /gdal/ogr/ogrsf_frmts/miramon/mm_rdlayr.c:353
#12 0x00007ffff5cc3dfb in MMGetGeoFeatureFromVector 
(hMiraMonLayer=0x555556446fd0, i_elem=1)
    at /gdal/ogr/ogrsf_frmts/miramon/mm_rdlayr.c:614
#13 0x00007ffff5ca6d63 in OGRMiraMonLayer::GetFeature (this=0x555556419300, 
nFeatureId=1)
    at /gdal/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp:860
#14 0x00007ffff5ca6598 in OGRMiraMonLayer::GetNextRawFeature 
(this=0x555556419300)
    at /gdal/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp:696
#15 0x00007ffff5cac1df in 
OGRGetNextFeatureThroughRaw<OGRMiraMonLayer>::GetNextFeature 
(this=0x555556419300)
    at /gdal/ogr/ogrsf_frmts/ogrsf_frmts.h:455
#16 0x00007ffff5cac186 in OGRMiraMonLayer::GetNextFeature (this=0x555556419300)
    at /gdal/ogr/ogrsf_frmts/miramon/ogrmiramon.h:109
#17 0x00007ffff60e860b in OGR_L_GetNextFeature (hLayer=0x555556419300)

At #10 we can see the variable nNum set to a non-sense megabignumber.
This variable is set during Opening... 

But my question is: The opening is in ds = 
gdal.OpenEx("data/miramon/Polygons/SimplePolygons/SimplePolFile.pol")
The variable is stored in a C++ class member (in a old fashion C struct) but 
available that it's filled in the opening.

After that, lyr = ds.GetLayer(0) is called.
And after that when lyr.GetNextFeature() is called... is this nNum set before 
still alive?
Or perhaps I should read every time I Get a Next Feature?

Thanks for answering this question!

Thanks Daniel for your pacience.



-----Mensaje original-----
De: Andrew C Aitchison <and...@aitchison.me.uk> 
Enviado el: dijous, 7 de març de 2024 1:01
Para: Daniel Evans <daniel.fred.ev...@gmail.com>
CC: Abel Pau <a....@creaf.uab.cat>; 'gdal-dev@lists.osgeo.org' 
(gdal-dev@lists.osgeo.org) <gdal-dev@lists.osgeo.org>
Asunto: Re: [gdal-dev] Testing the driver

On Wed, 6 Mar 2024, Daniel Evans via gdal-dev wrote:

> Is it worth moving this in-depth discussion to a PR or similar for the 
> new driver?
>
> My thinking is that a lengthy discussion on memory leak detection 
> techniques in C++, how to run tests in Python, etc., aren't topics 
> relevant to most GDAL mailing list subscribers.

Maybe so, but how to develop gdal is surely on-topic for gdal-dev ?

I"m still following and learning.

-- 
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