[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
960517: xdrposix_putlong() segmentation fault problems
- Subject: 960517: xdrposix_putlong() segmentation fault problems
- Date: Fri, 17 May 96 09:37:22 -0600
Magnus,
>Date: Fri, 17 May 1996 11:15:27 +0200
>From: Magnus Weis <address@hidden>
>Organization: .
>To: Steve Emmerson <address@hidden>
>Subject: 960513: xdrposix_putlong() segmentation fault problems
>Keywords: 199605091033.AA23012
In the above message you wrote:
...
> > I think the problem is the last line:
> >
> > call ncvpt(ncid, ncv, nc2cor, nc2cnt, xi, errno)
> >
> > According to the above code, you're trying to write the following array:
> >
> > REAL xi(IMAX+1,record)
> >
> > into the netCDF dataset beginning at coordinates (1,record).
> > Unfortunately, the array `xi' doesn't appear to be dimensioned properly
> > (indeed, it doesn't appear to be an array at all -- merely a scalar
> > variable).
> >
> > Also, the `t' variable requires that a DOUBLEPRECISION variable be used
> > in any NCVPT1 call. The one you are using appears to be only REAL.
> >
>
> Sorry for causing some missunderstanding. I did not show you all my
> declarations. Here they are:
>
> float*8 t
> float*8 xi(0:IMAX)
>
If the array xi() is dimensioned as above, then you're trying to write
more data than you have. The relevant section of your code is
ncv = ncvid(ncid, 'xi', errno)
nc2cor(1) = 1
nc2cor(2) = record
nc2cnt(1) = IMAX + 1
nc2cnt(2) = nc2cor(2) ! problem here
call ncvpt(ncid, ncv, nc2cor, nc2cnt, xi, errno)
Because of the values in the `nc2cnt' array, the netCDF library
expects that the `xi' array in the call to ncvpt() is dimensioned
xi(IMAX+1,record) -- and it will try to write all (IMAX+1)*record
elements. The more records you write, the greater the `record' index
will be and the larger the netCDF library will expect the `xi' array to
be.
I suspect that you should use the following code:
ncv = ncvid(ncid, 'xi', errno)
nc2cor(1) = 1
nc2cor(2) = record
nc2cnt(1) = IMAX + 1
nc2cnt(2) = 1 ! change here
call ncvpt(ncid, ncv, nc2cor, nc2cnt, xi, errno)
The above code will write one `xi' record per call -- which is what you
want, I suspect.
--------
Steve Emmerson <address@hidden>