[問題] Segmentation fault (core dumped)

看板C_and_CPP作者 (hc)時間10年前 (2015/05/29 21:06), 10年前編輯推噓4(4010)
留言14則, 9人參與, 最新討論串1/1
出現問題的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 ); 但還是一樣 想請問是哪裡出了錯誤? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.6.123 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1432904811.A.C15.html

05/29 21:08, , 1F
argc==3?
05/29 21:08, 1F

05/29 21:12, , 2F
改過了, 但執行時還是出現Segmentation fault (core dumped
05/29 21:12, 2F
※ 編輯: proud (49.219.132.106), 05/29/2015 21:14:05

05/29 21:17, , 3F
getgrnam 可能回傳NULL
05/29 21:17, 3F

05/29 21:18, , 4F
沒檢查就拿去while 可能爆炸
05/29 21:18, 4F
Thanks ※ 編輯: proud (49.219.132.106), 05/29/2015 21:26:49

05/30 00:04, , 5F
er...都會用linux sdk了,請盡量跟gdb混熟一點喔(汗
05/30 00:04, 5F

05/30 00:04, , 6F
不然你以後的夢靨保證無窮無盡
05/30 00:04, 6F
好的,謝謝建議

05/30 01:27, , 7F
你的data -> gr_mem 有多長? while怎麼知道要停在哪
05/30 01:27, 7F

05/30 01:28, , 8F
照你的寫法while會跑到超過gr_mem 長度 然後就seg fault
05/30 01:28, 8F
只是錯誤點不像是長度啊

05/30 05:03, , 9F
...............為什麼不用 gdb?
05/30 05:03, 9F

05/30 09:12, , 10F
gr_mem沒問題 請先去看struct group的定義
05/30 09:12, 10F

05/30 10:52, , 11F
第七行data = getgrnam("gp"); 不用加引號吧?
05/30 10:52, 11F

05/30 10:53, , 12F
你想傳入的應該是argv[2]而不是"gp"這個詞?
05/30 10:53, 12F
對,只是如果直接放入的話會接到後面的迴圈,後來就改下面的code,裡面直接放argv[]

05/30 12:08, , 13F
gdb your_process core_file
05/30 12:08, 13F
proud: 感謝大家幫忙! 我最後就不strcpy 字串,直接在裡面放入argv [] 05/30 13:33 ※ 編輯: proud (49.217.16.219), 05/30/2015 13:37:59

05/30 22:59, , 14F
抓-g這種option可以用getopt
05/30 22:59, 14F
文章代碼(AID): #1LQ6HhmL (C_and_CPP)