[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 19990601: NcVar::name()
- Subject: Re: 19990601: NcVar::name()
- Date: Tue, 01 Jun 1999 14:22:44 -0600
>To: address@hidden
>From: address@hidden (Melissa Petty)
>Subject: NcVar::name()
>Organization: .
>Keywords: 199905281904.NAA15518
Hi Missy,
> Hi there-
>
> I have been writing a test program using the netcdf c++ library, and
> whenever I call NcVar::name(), I get a 'segmentation fault' error.
> Here is the code:
>
> main()
>
> {
> float *vplane;
> NcDim *xdim, *ydim, *zdim;
> int n;
> NcVar *varPtr = 0;
> float *varArray = 0;
> int *varDims = 0;
>
> NcError* ncErr = new NcError(NcError::silent_nonfatal);
>
> NcFile nfile("ruc2.netcdf.19990428.i12.f00.nc", NcFile::ReadOnly);
> if (!nfile.is_valid())
> {
> cerr << "Unable to open netcdf file\n";
> exit(-1);
> }
>
> cout << "num vars: " << nfile.num_vars() << "\n";
>
> varPtr = nfile.get_var("v_hybr");
> if (!varPtr)
> {
> cerr << "Unable to obtain variable v_hybr" << "\n";
> exit(-1);
> }
>
> cout << "num dims of var: " << varPtr->num_dims() << "\n";
> // cout << varPtr->name() << "\n";
>
> xdim = nfile.get_dim("x");
> ydim = nfile.get_dim("y");
> zdim = nfile.get_dim("level");
>
> cout << "x dim is " << xdim->size() << "\n";
> cout << "x dim name is " << xdim->name() << "\n";
> cout << "y dim is " << ydim->size() << "\n";
> // cout << "level is " << zdim->size() << "\n";
>
> }
>
> With the varPtr->name() line commented out, everything is fine:
>
> num vars: 42
> num dims of var: 4
> x dim is 151
> x dim name is x
> y dim is 113
>
>
> But when I uncomment it, I get this:
>
> num vars: 42
> num dims of var: 4
> Segmentation fault
>
>
> Do you know what might be wrong? I am on a Linux machine.
I've tried to duplicate the problem here, but the program worked fine,
even with the
cout << varPtr->name() << "\n";
statement included.
Here's what I did, in case that helps explain the difference:
On our Linux 2.2.6/i686 platform, I built netCDF version 3.4 from
<ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-3.4.tar.Z> using the
following environment variable settings before running the configure
script:
CPPFLAGS="-DNDEBUG -Df2cFortran"
CFLAGS=-O
FC=/usr/bin/fort77
FFLAGS="-O -Nx400 -w"
(though the Fortran flags should have nothing to do with the C++
library, and you should be able to leave out the Fortran interface if
you're not using it, by using FC="").
Then I checked that "make all test" built the library and passed all
the tests, including the C++ test. Just in case it makes any
difference, the compiler versions were:
$ cc --version
2.7.2.3
$ c++ --version
egcs-2.90.29 980515 (egcs-1.0.3 release)
At the top your code, I added the statement
#include "netcdf.hh"
to get all the prototypes for the netCDF functions defined. I
compiled and linked from within the netcdf/cxx/ directory where I
built the code instead of bothering to install it, using:
$ c++ -c -I../libsrc -I. mp.cc
$ c++ -o mp -I../libsrc -O mp.o libnetcdf_c++.a -L../libsrc -lnetcdf
Then when I ran it, I got the following output:
$ ./mp
num vars: 111
num dims of var: 4
v_hybr
x dim is 151
x dim name is x
y dim is 113
This was on our version of a ruc2 netCDF file, which may not be the
same as what you are using, but I doubt that the data has anything to
do with this problem. If you have a similar platform and compilers,
but still see the problem, maybe it is related to the data, in which
case I'll need to get access to that file to debug the problem.
--Russ
_____________________________________________________________________
Russ Rew UCAR Unidata Program
address@hidden http://www.unidata.ucar.edu