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