[GRASS-dev] Re: [GRASS-user] Problem with r.reclas on ubuntu feisty

Hamish hamish_nospam at yahoo.com
Wed Apr 25 18:16:40 EDT 2007


Maciej Sieczka wrote:
> Jaros³aw Jasiewicz wrote:
> 
> > I have problem with r.reclass (and r.reclas.rules) from latest cvs
> > (updated wensday morning)
> > on whatever map I use it I recive segmentation fault error
> 
> I confirm for current GRASS 6.3 CVS built and running on Ubuntu
> Dapper, 32 bit, GCC 4.0.3, Pentium M, kernel 2.6.15-28-686.
> 
> Any r.reclass session ends up with a segfault after the 'end' command;
> eg. in spearfish:
> 
> $ r.reclass in=aspect output=tryit
> 
> > 1 thru 9.9 = 1
> 10.400000 rounded up to 10
> > 30 thru 31 = 32
> > end
> Segmentation fault

Same here.


Working through a gdb session:

G63> gdb `which r.reclass`
...
(gdb) run in=aspect output=tryit
Starting program: /usr/local/src/grass/grass63/dist.i686-pc-linux-gnu/bin/r.reclass in=aspect output=tryit

Enter rule(s), "end" when done, "help" if you need it
fp: Data range is 0.0000000000000000000000000 to 360.0000000000000000000000000
> 1 thru 9.9 = 1
10.400000 rounded up to 10
> 30 thru 31 = 32
> end

Program received signal SIGSEGV, Segmentation fault.
0x40121556 in strcpy () from /lib/libc.so.6

### see where it happened

(gdb) where
#0  0x40121556 in strcpy () from /lib/libc.so.6
#1  0x0804a922 in reclass (old_name=0x804c930 "aspect", old_mapset=0x804c750 "PERMANENT", 
    new_name=0x804c940 "tryit", rules=0x804c790, cats=0xbffff570, title=0x0) at reclass.c:234
#2  0x08049933 in main (argc=4, argv=0xbffff6a4) at main.c:122

### in the current frame (#2) see where in the source code it was
###  (main.c line 122, as shown above)

(gdb) list
122         reclass (parm.input->answer, old_mapset, parm.output->answer, rules, &cats, parm.ti            tle->answer);
123     
124         exit(EXIT_SUCCESS);
125     }

### main.c is just a wrapper, jump into the "#1" function as listed in
###  the above "where".  (#1 (...) at reclass.c:234)

(gdb) frame 1
#1  0x0804a922 in reclass (old_name=0x804c930 "aspect", old_mapset=0x804c750 "PERMANENT", 
    new_name=0x804c940 "tryit", rules=0x804c790, cats=0xbffff570, title=0x0) at reclass.c:234
234             strcpy (new.name, old_name);

(gdb) list
229             strcpy (new.mapset, old.mapset);
230             re_reclass (rules, cats, &old, &new, old_name, old_mapset);
231         }
232         else
233         {
234             strcpy (new.name, old_name);
235             strcpy (new.mapset, old_mapset);
236             _reclass (rules, cats, &new);
237         }
238     

### print the contents of the new.name and old_name variables

(gdb) p new.name
$1 = 0xfff098 <Address 0xfff098 out of bounds>
(gdb) p old_name
$3 = 0x804c930 "aspect"

### note there is also an "old.name" variable
(gdb) p old.name
$2 = 0x0


Memory was never allocated for the "new" Reclass struct??
so strcpy() tries to copy the string into unknown memory space, and fails.


> Why "10.400000 rounded up to 10". I specified range "1 thru 9.9"...

no idea.



Hamish




More information about the grass-user mailing list