Hello again,
I just upgraded our netCDF version to 4.3.3.1, and am testing whether we
still get a segmentation fault in Windows when using the MATLAB high-level
ncinfo function to read the following OPeNDAP dataset:
http://data.nodc.noaa.gov/thredds/dodsC/testdata/pathfinderAgg/pathFinderV5.2_night.ncml
I confirmed this still happens with 4.3.3.1 in MATLAB. Note this does not
happen in Linux or Mac, only Windows.
I attempted to isolate the problem by writing a standalone C function that
links to netCDF 4.3.3.1, bypassing MATLAB.
I compiled the function in Linux using make, and Visual Studio 2012.
In Linux, the program runs fine. In Windows, it gets to the nc_close(ncid)
line and then throws an unhandled exception.
I copied the standalone program below. Do you know if there is still a
problem accessing this pathfinderAgg dataset in Windows?
Thank you!
Ellen
Software Engineer
Image and Scientific File Formats
MathWorks
#include <netcdf.h>
static char*
URL="http://data.nodc.noaa.gov/thredds/dodsC/testdata/pathfinderAgg/pathFinderV5.2_night.ncml";
int
main()
{
int ncid;
int ncstatus;
int lat_id;
nc_type lat_type;
int lat_ndims;
int lat_dimids[NC_MAX_VAR_DIMS];
int lat_natts;
int format_p;
float lat_data[4320];
printf(" \n");
printf("********************\n");
printf("open URL %s\n",URL);
printf(" \n");
ncstatus = nc_open(URL, NC_NOWRITE, &ncid);
if(ncstatus != NC_NOERR) {
printf("Could not open: %s; server may be down; test ignored\n",URL);
exit(0);
}
printf("status after open = %d\n", ncstatus);
// get the format
ncstatus = nc_inq_format(ncid, &format_p);
printf("lat id = %d\n", format_p);
// get varid for latitude
ncstatus = nc_inq_varid(ncid,"lat",&lat_id);
printf("status after inq lat id = %d\n", ncstatus);
printf("lat id = %d\n", lat_id);
ncstatus = nc_inq_var(ncid, lat_id, 0, &lat_type, &lat_ndims, lat_dimids,
&lat_natts);
printf("status after inq lat var = %d\n", ncstatus);
printf("lat type = %d\n", lat_type);
// extract the first latitude value
ncstatus = nc_get_var_float(ncid, lat_id, &lat_data[0]);
printf("status after get = %d\n", ncstatus);
printf("my datum = %f\n", lat_data[0]);
// This code works okay in Linux and Mac
// Everything works okay up until here in Windows then an exception occurs
ncstatus = nc_close(ncid);
printf("status after close = %d\n", ncstatus);
printf("End of test.\n\n");
return 0;
}