[問題] Segmentation fault (core dumped)

作者: proud (hc)   2015-05-29 21:06:48
出現問題的code如下
if(argc==3){
if( strcmp(argv[1], "-g") == 0 ){
struct group *data;
char gp[50];
int i=0;
strcpy(gp, argv[2] );
data = getgrnam("gp");
If(data != NULL){
while(data -> gr_mem[i]){
printf("%s\n",data->gr_mem[i++]);
}
}
}
}
compiler沒有問題.但想要執行這段的時候顯示
Segmentation fault (core dumped)
我試過把strcpy這行改成strncpy(gp, argv[2],10 );
但還是一樣
想請問是哪裡出了錯誤?
作者: dracb (伊達政宗)   2015-05-29 21:08:00
argc==3?
作者: proud (hc)   2015-05-29 21:12:00
改過了, 但執行時還是出現Segmentation fault (core dumped
作者: x000032001 (版廢了該走了)   2015-05-29 21:17:00
getgrnam 可能回傳NULL沒檢查就拿去while 可能爆炸
作者: Killercat (殺人貓™)   2015-05-30 00:04:00
er...都會用linux sdk了,請盡量跟gdb混熟一點喔(汗不然你以後的夢靨保證無窮無盡
作者: WYchuang (愛賴床的黃金獵犬)   2015-05-30 01:27:00
你的data -> gr_mem 有多長? while怎麼知道要停在哪照你的寫法while會跑到超過gr_mem 長度 然後就seg fault
作者: tinlans ( )   2015-05-30 05:03:00
...............為什麼不用 gdb?
作者: x000032001 (版廢了該走了)   2015-05-30 09:12:00
gr_mem沒問題 請先去看struct group的定義
作者: penknifelee (狂禪)   2015-05-30 10:52:00
第七行data = getgrnam("gp"); 不用加引號吧?你想傳入的應該是argv[2]而不是"gp"這個詞?
作者: shadow0326 (非議)   2015-05-30 12:08:00
gdb your_process core_file
作者: soso7885 (YOHO)   2015-05-30 22:59:00
抓-g這種option可以用getopt

Links booklink

Contact Us: admin [ a t ] ucptt.com