Hello, list:

I have problems reading some large GRIB files from ECMWF. I have several files, 
29MB and 50MB works fine, 141 MB and above crashes. The crash is within the 
first GDALOpen() function, and I track it through GRIBDataset::Open() to 
GDALDataset::Setband(). The error arises in the last statement given below, and 
because papoBands==NULL. By the two breakpoints I can tell that papoBands is 
not NULL when entering the SetBand() function, so it seems to be the VSIRealloc 
function that returns NULL. The error doesn't occur for the same band each time 
I try, but typically runs to band number somewhere around 50000. (bandno is a 
combined index of forecast reference time, forecast lead time and variable).

I run GDAL 1.6.3 on Windows XP, compiled with Visual Studio 2008. The error 
appears both in debug and release version. The application uses about 144 MB 
when it crashes, but has been up to a peak memory usage of 283 MB before the 
crash. I have 3.5 GB memory on the PC, of which 2.5 appears to be available. 
Both GDAL and the application is compiled with extended memory sizes and 
/LARGEADDRESSAWARE, but I am not sure about how this works. The error message 
is:

Unhandled exception at 0x30c36acd (gdal16d-vc9.dll) in RegModel.exe: 
0xC0000005: Access violation writing location 0x00036c74.

Has anyone had similar problems?
Best regards,
Sjur K :-)



void GDALDataset::SetBand( int nNewBand, GDALRasterBand * poBand )

{

/* -------------------------------------------------------------------- */

/* Do we need to grow the bands list? */

/* -------------------------------------------------------------------- */

if( nBands < nNewBand || papoBands == NULL ) {

    int i;

    if( papoBands == NULL )

        papoBands = (GDALRasterBand **)  /* Breakpoint before this statement */

            VSICalloc(sizeof(GDALRasterBand*), MAX(nNewBand,nBands));

    else

    papoBands = (GDALRasterBand **)

        VSIRealloc(papoBands, sizeof(GDALRasterBand*) *

            MAX(nNewBand,nBands));

    for( i = nBands; i < nNewBand; i++ )   /* Breakpoint before this statement; 
condition: papoBands=0 */

        papoBands[i] = NULL;    /* Offending statement, papoBands==NULL.



State of poBand at error:

-  poBand 0x357f4228 {start=172766438 subgNum=0 longFstLevel=0x746a3e28 "0[-] 
SFC (Ground or water surface)" ...} GDALRasterBand *
+  [GRIBRasterBand] {start=172766438 subgNum=0 longFstLevel=0x746a3e28 "0[-] 
SFC (Ground or water surface)" ...} GRIBRasterBand
+  GDALMajorObject {nFlags=49 sDescription={...} oMDMD={...} } GDALMajorObject
+  poDS 0x3424f4b0 {fp=0x3424fb08 pszProjection=0x35b3ce68 "GEOGCS["Coordinate 
System imported from GRIB 
file",DATUM["unknown",SPHEROID["Sphere",6367470,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]"
 pszDescription=0xcdcdcdcd <Bad Ptr> ...} GDALDataset *
  nBand 56094 int
  nRasterXSize 0 int
  nRasterYSize 0 int
  eDataType GDT_Float64 GDALDataType
  eAccess GA_ReadOnly GDALAccess
  nBlockXSize 45 int
  nBlockYSize 1 int
  nBlocksPerRow 0 int
  nBlocksPerColumn 0 int
  bSubBlockingActive 0 int
  nSubBlocksPerRow 0 int
  nSubBlocksPerColumn 0 int
+  papoBlocks 0x00000000 GDALRasterBlock * *
  nBlockReads 0 int
  bForceCachedIO 0 int
+  poMask 0x00000000 {poDS=??? nBand=??? nRasterXSize=??? ...} GDALRasterBand *
  bOwnMask false bool
  nMaskFlags 0 int

Status of this GDALDataset:

  i -858993460 int
  nBands 49093 int
  nNewBand 49094 int
+  papoBands 0x00000000 GDALRasterBand * *
-  this 0x3424f4b0 {fp=0x3424fab8 pszProjection=0x35b31048 "GEOGCS["Coordinate 
System imported from GRIB 
file",DATUM["unknown",SPHEROID["Sphere",6367470,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]"
 pszDescription=0xcdcdcdcd <Bad Ptr> ...} GDALDataset * const
+  [GRIBDataset] {fp=0x3424fab8 pszProjection=0x35b31048 "GEOGCS["Coordinate 
System imported from GRIB 
file",DATUM["unknown",SPHEROID["Sphere",6367470,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]"
 pszDescription=0xcdcdcdcd <Bad Ptr> ...} GRIBDataset
+  GDALMajorObject {nFlags=33 sDescription={...} oMDMD={...} } GDALMajorObject
+  poDriver 0x00000000 {pfnOpen=??? pfnCreate=??? pfnDelete=??? ...} GDALDriver 
*
  eAccess GA_ReadOnly GDALAccess
  nRasterXSize 45 int
  nRasterYSize 33 int
  nBands 49093 int
+  papoBands 0x00000000 GDALRasterBand * *
  bForceCachedIO 0 int
  nRefCount 1 int
  bShared 0 int
+  oOvManager {poDS=0x00000000 poODS=0x00000000 osOvrFilename={...} ...} 
GDALDefaultOverviews






_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to