dziwny sigsegv

Jarek Woloszyn yossa w dione.ids.pl
Śro, 19 Maj 1999, 01:24:42 CEST


Wlasnie mecze sie nad jednym bugiem

oto kod programu:

      if (tmp_packets[ptrSel->num]!=NULL)
           free(tmp_packets[ptrSel->num]);
      //tmp_packets[ptrSel->num]=strdup(pkgs[i].name);
[1]      tmp_packets[ptrSel->num]=(char*) malloc(sizeof(char)*
                                              (strlen(pkgs[i].name)+2));
      strcpy(tmp_packets[ptrSel->num],pkgs[i].name);

(wczesniej bylo z strdup, ale zmienilem do debugowania)

wczesniej bylo deklarowane

 #define MAX_PACKET_IN_GROUP 2000
 char *tmp_packets[MAX_PACKET_IN_GROUP];  

i robione

 for (i=0;i<MAX_PACKET_IN_GROUP;i++) tmp_packets[i]=NULL;

a oto co pokazal gdb na linii [1] 

(gdb) print ptrSel->num
$2 = 12
(gdb) print tmp_packets[ptrSel->num]
$3 = 0x0
(gdb) print pkgs[i].name
$4 = 0x809d990 "ircd"
(gdb) n

Program received signal SIGSEGV, Segmentation fault.
chunk_alloc (ar_ptr=0x40114bd0, nb=16) at malloc.c:2726
malloc.c:2726: Nie ma takiego pliku ani katalogu.

tmp_packets==NULL tylko wtedy gdy nigdy wczesniej nic tam nie bylo. zanim
wyskoczy sigsegv alokowane jest kilka tmp_packets, ktore byly rowne NULL.

i badz tu mądry. 
Najciekawsze jest to, ze w tej samej procce wyzej bawilem sie dokladnie w
ten sam sposob i wszystko jest ok. 

Jest 1:24, wiec mozliwe, ze to jakis banalny blad.


-- 
 .-+> yossa w pld.org.pl ---------------,----+> http://dione.ids.pl/~yossa --+,
|`+-- Living life to the full <+.  .-|--+> C Programmer ---+> Linux User ---.|
 `'+- Jarek Woloszyn ----------+'-'   `'+- PGP && Monopoly (ppp counter) <+-'
                    W logice tkwi zawsze pierwiastek nudy.



Więcej informacji o liście dyskusyjnej pld-installer