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");}



--
View this message in context: 
http://osgeo-org.1560.x6.nabble.com/memory-leak-in-gdal-program-tp5220559.html
Sent from the GDAL - Dev mailing list archive at Nabble.com.
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to