<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16945" name=GENERATOR></HEAD>
<BODY>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff 
size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
class=027292912-11122009>Hi again,</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
class=027292912-11122009></SPAN></FONT>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
class=027292912-11122009>This was obviously not a known problem. What&nbsp;we 
ended up with was to split the GRIB files up in smaller pieces using another 
software and importing bit by bit using GDAL. During the work&nbsp;we also had 
memory allocation problems in plain C++ code (myarray = new float[alotofcells]; 
gives "Out of memory" exception), so it seems that it is Windows that is not too 
happy with allocating large memory chunks. This amount of memory space, I guess, 
is most often needed by meteorological formats like grib, NetCDF or HDF, which 
are not too extensively used on Windows.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
class=027292912-11122009></SPAN></FONT>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
class=027292912-11122009>Does GDAL, or the drivers of often-large files, offer 
any possibility to restrict the subset of bands before&nbsp;calling GDALOpen() 
on the file?</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN 
class=027292912-11122009></SPAN></FONT>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=027292912-11122009><FONT face=Arial 
color=#0000ff size=2>Best regards,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=027292912-11122009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=027292912-11122009><FONT face=Arial 
color=#0000ff size=2>Sjur K :-)</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=027292912-11122009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV><FONT face=Arial color=#0000ff 
size=2></FONT><FONT face=Arial color=#0000ff size=2></FONT><FONT face=Arial 
color=#0000ff size=2></FONT><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> gdal-dev-bounces@lists.osgeo.org 
[mailto:gdal-dev-bounces@lists.osgeo.org] <B>On Behalf Of </B>Sjur 
Kolberg<BR><B>Sent:</B> 10. desember 2009 00:48<BR><B>To:</B> 
gdal-dev@lists.osgeo.org<BR><B>Cc:</B> Kolbjørn Engeland<BR><B>Subject:</B> 
[gdal-dev] GDALOpen crash on large GRIB files<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=046403922-09122009></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=046403922-09122009>Hello, 
list:</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=046403922-09122009></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=046403922-09122009>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()&nbsp;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).</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=046403922-09122009></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=046403922-09122009>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:</SPAN></FONT></DIV>
<DIV><FONT size=2><SPAN class=046403922-09122009></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT size=2><SPAN class=046403922-09122009>Unhandled exception at 
0x30c36acd (gdal16d-vc9.dll) in RegModel.exe: 0xC0000005: Access violation 
writing location 0x00036c74.</SPAN></FONT></DIV>
<DIV><FONT size=2><SPAN class=046403922-09122009></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=046403922-09122009><SPAN 
class=046403922-09122009>Has anyone had similar 
problems?</SPAN></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=046403922-09122009><SPAN 
class=046403922-09122009><SPAN class=046403922-09122009><FONT size=2>Best 
regards,</FONT></SPAN></SPAN></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=046403922-09122009><SPAN 
class=046403922-09122009><SPAN class=046403922-09122009></SPAN><SPAN 
class=046403922-09122009><FONT size=2>Sjur K :-)</FONT></SPAN></DIV>
<P><SPAN class=046403922-09122009><FONT 
size=2></FONT></SPAN>&nbsp;</P></SPAN></SPAN></FONT>
<DIV><FONT color=#0000ff><FONT color=#0000ff>
<P><FONT size=2>void</FONT></FONT></FONT><FONT size=2> GDALDataset::SetBand( 
<FONT color=#0000ff><FONT color=#0000ff>int</FONT></FONT> nNewBand, 
GDALRasterBand * poBand )</FONT></P>
<P><FONT size=2>{</FONT></P><FONT color=#008000><FONT color=#008000>
<P><FONT size=2>/* 
-------------------------------------------------------------------- 
*/</FONT></P>
<P><FONT size=2>/* Do we need to grow the bands list? */</FONT></P>
<P><FONT size=2>/* 
-------------------------------------------------------------------- 
*/</FONT></P></FONT></FONT>
<P><FONT size=2><FONT color=#0000ff><FONT color=#0000ff>if</FONT></FONT>( nBands 
&lt; nNewBand || papoBands == NULL ) {</FONT></P>
<P><FONT size=2><FONT color=#0000ff><SPAN 
class=046403922-09122009>&nbsp;&nbsp;&nbsp; </SPAN>int</FONT> i;</FONT></P>
<P><FONT size=2><FONT color=#0000ff><SPAN 
class=046403922-09122009>&nbsp;&nbsp;&nbsp; </SPAN>if</FONT>( papoBands == NULL 
)</FONT></P>
<P><FONT size=2><SPAN 
class=046403922-09122009>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>papoBands = (GDALRasterBand **)<SPAN 
class=046403922-09122009>&nbsp;&nbsp;<FONT color=#ff0000>/* Breakpoint before 
this statement */</FONT></SPAN></FONT></P>
<P><SPAN class=046403922-09122009></SPAN><FONT size=2><SPAN 
class=046403922-09122009>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>VSICalloc(<FONT color=#0000ff><FONT 
color=#0000ff>sizeof</FONT></FONT>(GDALRasterBand*), 
MAX(nNewBand,nBands));</FONT></P>
<P><FONT color=#0000ff><FONT size=2><SPAN 
class=046403922-09122009>&nbsp;&nbsp;&nbsp; </SPAN>else</FONT></FONT></P>
<P><FONT size=2><SPAN class=046403922-09122009>&nbsp;&nbsp;&nbsp; 
</SPAN>papoBands = (GDALRasterBand **)<SPAN 
class=046403922-09122009>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></FONT></P>
<P><SPAN class=046403922-09122009></SPAN><SPAN 
class=046403922-09122009></SPAN><FONT size=2><SPAN 
class=046403922-09122009>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>VSIRealloc(papoBands, <FONT color=#0000ff><FONT 
color=#0000ff>sizeof</FONT></FONT>(GDALRasterBand*) *</FONT></P>
<P><FONT size=2><SPAN 
class=046403922-09122009>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>MAX(nNewBand,nBands));</FONT></P>
<P><FONT size=2><FONT color=#0000ff><SPAN 
class=046403922-09122009>&nbsp;&nbsp;&nbsp; </SPAN>for</FONT>( i = nBands; i 
&lt; nNewBand; i++ )<SPAN class=046403922-09122009>&nbsp;&nbsp;&nbsp;<FONT 
color=#ff0000>/* Breakpoint before this statement; condition: papoBands=0 
*/</FONT></SPAN></FONT></P>
<P><FONT size=2><SPAN 
class=046403922-09122009>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>papoBands[i] = NULL;<SPAN class=046403922-09122009>&nbsp;&nbsp;&nbsp; 
</SPAN><FONT color=#ff0000>/*&nbsp;<SPAN class=046403922-09122009>Offending 
statement, papoBands==NULL.</SPAN></FONT></FONT></P>
<P><FONT size=2><FONT color=#ff0000><SPAN 
class=046403922-09122009></SPAN></FONT></FONT>&nbsp;</P>
<P><SPAN class=046403922-09122009><FONT size=2>State of poBand at 
error:</FONT></SPAN></P>
<P><FONT size=2>-&nbsp;&nbsp;poBand&nbsp;0x357f4228 {start=172766438 subgNum=0 
longFstLevel=0x746a3e28 "0[-] SFC (Ground or water surface)" 
...}&nbsp;GDALRasterBand 
*<BR>+&nbsp;&nbsp;[GRIBRasterBand]&nbsp;{start=172766438 subgNum=0 
longFstLevel=0x746a3e28 "0[-] SFC (Ground or water surface)" 
...}&nbsp;GRIBRasterBand<BR>+&nbsp;&nbsp;GDALMajorObject&nbsp;{nFlags=49 
sDescription={...} oMDMD={...} 
}&nbsp;GDALMajorObject<BR>+&nbsp;&nbsp;poDS&nbsp;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 &lt;Bad Ptr&gt; ...}&nbsp;GDALDataset 
*<BR>&nbsp;&nbsp;nBand&nbsp;56094&nbsp;int<BR>&nbsp;&nbsp;nRasterXSize&nbsp;0&nbsp;int<BR>&nbsp;&nbsp;nRasterYSize&nbsp;0&nbsp;int<BR>&nbsp;&nbsp;eDataType&nbsp;GDT_Float64&nbsp;GDALDataType<BR>&nbsp;&nbsp;eAccess&nbsp;GA_ReadOnly&nbsp;GDALAccess<BR>&nbsp;&nbsp;nBlockXSize&nbsp;45&nbsp;int<BR>&nbsp;&nbsp;nBlockYSize&nbsp;1&nbsp;int<BR>&nbsp;&nbsp;nBlocksPerRow&nbsp;0&nbsp;int<BR>&nbsp;&nbsp;nBlocksPerColumn&nbsp;0&nbsp;int<BR>&nbsp;&nbsp;bSubBlockingActive&nbsp;0&nbsp;int<BR>&nbsp;&nbsp;nSubBlocksPerRow&nbsp;0&nbsp;int<BR>&nbsp;&nbsp;nSubBlocksPerColumn&nbsp;0&nbsp;int<BR>+&nbsp;&nbsp;papoBlocks&nbsp;0x00000000&nbsp;GDALRasterBlock 

*<BR>&nbsp;&nbsp;nBlockReads&nbsp;0&nbsp;int<BR>&nbsp;&nbsp;bForceCachedIO&nbsp;0&nbsp;int<BR>+&nbsp;&nbsp;poMask&nbsp;0x00000000 
{poDS=??? nBand=??? nRasterXSize=??? ...}&nbsp;GDALRasterBand 
*<BR>&nbsp;&nbsp;bOwnMask&nbsp;false&nbsp;bool<BR>&nbsp;&nbsp;nMaskFlags&nbsp;0&nbsp;int<BR></FONT></P>
<P><SPAN class=046403922-09122009><FONT size=2>Status of this 
GDALDataset:</FONT></SPAN></P>
<P><SPAN class=046403922-09122009><FONT face=Arial 
size=2>&nbsp;&nbsp;i&nbsp;-858993460&nbsp;int<BR>&nbsp;&nbsp;nBands&nbsp;49093&nbsp;int<BR>&nbsp;&nbsp;nNewBand&nbsp;49094&nbsp;int<BR>+&nbsp;&nbsp;papoBands&nbsp;0x00000000&nbsp;GDALRasterBand 
* *<BR>-&nbsp;&nbsp;this&nbsp;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 &lt;Bad Ptr&gt; ...}&nbsp;GDALDataset * 
const<BR>+&nbsp;&nbsp;[GRIBDataset]&nbsp;{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 &lt;Bad Ptr&gt; 
...}&nbsp;GRIBDataset<BR>+&nbsp;&nbsp;GDALMajorObject&nbsp;{nFlags=33 
sDescription={...} oMDMD={...} 
}&nbsp;GDALMajorObject<BR>+&nbsp;&nbsp;poDriver&nbsp;0x00000000 {pfnOpen=??? 
pfnCreate=??? pfnDelete=??? ...}&nbsp;GDALDriver 
*<BR>&nbsp;&nbsp;eAccess&nbsp;GA_ReadOnly&nbsp;GDALAccess<BR>&nbsp;&nbsp;nRasterXSize&nbsp;45&nbsp;int<BR>&nbsp;&nbsp;nRasterYSize&nbsp;33&nbsp;int<BR>&nbsp;&nbsp;nBands&nbsp;49093&nbsp;int<BR>+&nbsp;&nbsp;papoBands&nbsp;0x00000000&nbsp;GDALRasterBand 

*<BR>&nbsp;&nbsp;bForceCachedIO&nbsp;0&nbsp;int<BR>&nbsp;&nbsp;nRefCount&nbsp;1&nbsp;int<BR>&nbsp;&nbsp;bShared&nbsp;0&nbsp;int<BR>+&nbsp;&nbsp;oOvManager&nbsp;{poDS=0x00000000 
poODS=0x00000000 osOvrFilename={...} 
...}&nbsp;GDALDefaultOverviews<BR></FONT></SPAN></P>
<P><SPAN class=046403922-09122009><FONT size=2></FONT></SPAN>&nbsp;</P>
<P><SPAN class=046403922-09122009><FONT size=2></FONT></SPAN>&nbsp;</P>
<P><SPAN class=046403922-09122009><FONT 
size=2></FONT></SPAN>&nbsp;</P></DIV></BODY></HTML>