I'm using GDAL 201 to iterate features in a geodatabase feature class and add a new text field, whose value depends on the integer value in another field.

It gives a fairly large memory leak (approx 1GB for every 1m features iterated). I'm not sure where the leak is....any ideas?

The full code:


int main(int argc, char *argv[])
{
        // Get the input arguments
        char *path = argv[1];
        char *layer = argv[2];
        char *field = argv[3];

        // Open the dataset in update mode
        GDALAllRegister();

        GDALDatasetH hDS;
        hDS = GDALOpenEx(path, GDAL_OF_VECTOR | GDAL_OF_UPDATE , NULL, NULL, NULL);

        if( hDS == NULL )
        {
                printf( "Open failed.\n" );
                exit( 1 );
        }

        // Get the layer
        OGRLayerH hLayer;
        hLayer = GDALDatasetGetLayerByName(hDS, layer);
        OGRFeatureDefnH hFDefn = OGR_L_GetLayerDefn(hLayer);

        // Get the field index
        int index = OGR_FD_GetFieldIndex(hFDefn, field);

        // Create the new field
        OGRFieldDefnH hFieldDefn;
        hFieldDefn = OGR_Fld_Create("depth_band", OFTString);
        OGR_Fld_SetWidth(hFieldDefn, 32);

    if( OGR_L_CreateField( hLayer, hFieldDefn, TRUE ) != OGRERR_NONE )
    {
        printf( "Creating depth_band field failed.\n" );
        exit( 1 );
    }
    OGR_Fld_Destroy(hFieldDefn);

        int value; // Field value
        char depth_band[32]; //New attribute
        // Loop through all features
        OGRFeatureH hFeature;
        OGR_L_ResetReading(hLayer);
        int count = 0;
        while( (hFeature = OGR_L_GetNextFeature(hLayer)) != NULL)
        {

                // Get the depth band value and map it to the depth band description text
                value = OGR_F_GetFieldAsInteger(hFeature, index);

                switch(value){
                        case 1:
                                depth_band = "x <= 0.3m";
                                break;
                        case 2:
                                depth_band = "0.3 < x <= 1m";
                                break;
                        case 3:
                                depth_band = "1 < x <= 3m";
                                break;
                        case 4:
                                depth_band = "3 < x <= 6m";
                                break;
                        case 5:
                                depth_band = "6 < x <= 9m";
                                break;
                        case 6:
                                depth_band = "x > 9m";
                                break;
                }
                // Set the new field value
                OGR_F_SetFieldString(hFeature, OGR_F_GetFieldIndex(hFeature, "depth_band"), depth_band);
                count++;
                printf("%d features processed\r", count);
        }
        GDALClose(hDS);
        printf("\nProcessing complete!\n");
}


        
        
        
<br/><hr align="left" width="300" />
View this message in context: <a href="http://osgeo-org.1560.x6.nabble.com/memory-leak-in-gdal-program-tp5220559.html">memory leak in gdal program</a><br/>
Sent from the <a href="http://osgeo-org.1560.x6.nabble.com/GDAL-Dev-f3742093.html">GDAL - Dev mailing list archive</a> at Nabble.com.<br/>