[GRASS5] problem with G_get_null_value_row &/or mapset searches in my own program

Glynn Clements glynn.clements at virgin.net
Sat May 3 00:07:08 EDT 2003


Scott W Mitchell wrote:

> I am porting a program written for GRASS4 to "the modern age".  After 
> dealing with a mess of code for a long time, I decided to start largely 
> from scratch, replacing relevant functions with new ones from the 
> GRASS5 API.
> 
> It was going pretty well, I got floating point support working, and 
> decided it was time to tackle the NULL data issue (the previous program 
> just checked for zeros in the input and ignored them).
> 
> The original program reads the whole raster into memory and samples all 
> over this array to gather a bunch of statistics.  I decided to keep 
> this behaviour, since it would be quite awkward to use row-based 
> processing for the algorithm in question.  But I figured I could use 
> G_get_null_value_row to hold a row's worth of data on null/non-null for 
> the one place in the algorithm where this would be useful.
> 
> The trouble is, my program core dumps as soon as it gets to
> G_get_null_value_row(fd, nullbuf, r);

I wouldn't recommend calling that directly; it would be safer to just
scan the data obtained by G_get_*_raster_row() etc for nulls.

> I've compared my program to others in the source tree, and as far as I 
> can see I am using it identically.  So I got it into a debugger and 
> found that the core dump is actually happening "further in", when 
> G_get_cell_hd calls G_is_reclass ...

I don't see how G_get_null_value_row() can end up calling
G_get_cellhd().

> and the arguments in that function 
> call reminded me of another unresolved bug I hadn't got to yet in this 
> software, which is probably my real problem here.
> This other problem is that I've done something wrong, or am missing 
> something important, which is interfering with the module's ability to 
> find files - or maybe it's the ability to keep track of the current 
> mapset.  As part of my rewrite of this program, I got rid of the user 
> interface it had and used the G_parser routines.  I find now that if I 
> give all my arguments on the command line, it seems to start off just 
> fine, and prior to my attempts to support NULL data, it proceeded 
> through to the end of the program, finding all the input it needed and 
> creating output.  But if I tried to use the interactive version 
> (through G_parser's assistance), any parameters that were looking for 
> existing files (rasters and site_lists) in the database could not be 
> found - and typing "list" in response to the prompt always returned an 
> empty list.
> 
> SO - sounds to me like the mapset is "lost", and I don't know why.  As 
> far as I can see I've followed the conventions in r.example and other 
> "real" programs.  I declare my variables, call G_gisinit(), declare all 
> my parameter and flag structures, and call G_parser.  All other 
> programs I've tried from the distributed source are behaving normally 
> (using CVS HEAD, aka grass 5.0.3-cvs).
> 
> I'm hoping this will be some simple, silly, error that will sound 
> familiar to those of you experienced in writing GRASS modules.... 
> anyone ?

No; I don't know of any obvious reason why you might have that
problem.

-- 
Glynn Clements <glynn.clements at virgin.net>




More information about the grass-dev mailing list