[问题] 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