Sorunu cozdum, ipucu bolumune birazdan ekleyecegim :)
 

*********** REPLY SEPARATOR ***********

On 22.03.2004 at 22:45 �zkan KIRIK wrote:
Merhabalar,
 
    Bu sefer de cok ufak bir sorun icin sizleri rahatsiz ediyorum. freebsd ile alakali degil ama...
 
programda (char *) tipi bir degiskenin NULL olup olmadigini bi yerde kontrol etmem gerekiyor.
ancak SEGMENTATION FAULT aliyorum. bunun nedenini incelemeye calistim.
GNU DEBUGGERda olmasa napariz acaba :))
 
ben ilgili kodlari yazayim:
 
>>>>>>>>>>>>>
Line154: char *client_sid;   /* acaba bir degeri olmayinca bellekte yer ayirmiyor mu diye dusundum, degerini " "'a esitledim yine olmadi :) */
...
Line222: query_string = strtop(tmp_str, "$\n");
Line223: client_sid = strtok(NULL, "$\n");
Line224:  if (*client_sid==NULL)
Line225:        *client_sid='$';
...
>>>>>>>>>>>>>
 
gdb ciktisinda bir nokta dikkatimi cekti :
>> (gdb) display *client_sid
>> 1: *client_sid = Error accessing memory address 0x0: Bad address.
nedeni neden olabilir ki acaba?
 
 
gdb ciktisi asagida:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 
kitap# gdb ipfwadmin 16848
GNU gdb 5.2.1 (FreeBSD)
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-undermydesk-freebsd"...
Attaching to program: /usr/home/ryland/ogren_c/new_ipfwadmin/ipfwadmin, process 16848
Reading symbols from /usr/lib/libc.so.5...done.
Loaded symbols for /usr/lib/libc.so.5
Reading symbols from /usr/libexec/ld-elf.so.1...done.
Loaded symbols for /usr/libexec/ld-elf.so.1
0x280ba4c3 in accept () from /usr/lib/libc.so.5
(gdb) break 224
Breakpoint 1 at 0x804961e: file ipfwadmin.c, line 224.
(gdb) continue
Continuing.
 
Breakpoint 1, accept_request (client=5) at ipfwadmin.c:224
224      if (*client_sid==NULL)
(gdb) display *client_sid
1: *client_sid = Error accessing memory address 0x0: Bad address.
Disabling display 1 to avoid infinite recursion.
(gdb) display client_sid
2: client_sid = 0x0
(gdb) display &client_sid
3: &client_sid = (char **) 0xbfbfeacc
(gdb) step
 
Program received signal SIGSEGV, Segmentation fault.
0x08049624 in accept_request (client=5) at ipfwadmin.c:224
224      if (*client_sid==NULL)
3: &client_sid = (char **) 0xbfbfeacc
2: client_sid = 0x0
(gdb)
 
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
(gdb) q
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 
 
Su ufak tefek sorunlari atlatabilirsem program bu gece bitecek :)
 
saygilar.tar.gz
Ozkan KIRIK

Cevap