首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

Linux下的C语言程序发生段异常,为什么呢

2013-03-26 
Linux下的C语言程序发生段错误,为什么呢?#include stdio.h#include stdlib.h#include string.h#defi

Linux下的C语言程序发生段错误,为什么呢?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMEMB 50
#define SIZE 10
int compar (const void *a, void *b)
{
return (strcmp((char *)a,(char *)b));
}
int main()
{
char data[NMEMB][SIZE]={"Linux","freebsd","solzris","sunos","windows"};
char key[80],*base,*offset;
int i,j, nmemb=NMEMB,size=SIZE;
for(i=1;i<5;i++)
{
fgets(key,sizeof(key),stdin);
key[strlen(key)-1]='\0';
base=data[0];
offset=(char*)lfind(key,base,&nmemb,size,compar);
if(offset == NULL)
{
printf("%s not found!\n",key);
//j++;
offset=(char*)lsearch(key,base,&nmemb,size,compar);
//printf("Add %s to data array\n",data+j);
printf("Add %s to data array\n",offset);
}
else
{
printf("found: %s\n",offset);
}
}
}



[wyq@localhost lfindbsearch]$ gcc lfind.c -o lfind
[wyq@localhost lfindbsearch]$ ./lfind
Linux
found: Linux
nihao
nihao not found!
Add Linux下的C语言程序发生段异常,为什么呢 to data array(怎么会有乱码?)
hello
hello not found!
Add hello to data array
Segmentation fault

为什么会发生段错误?
经过调试:

(gdb) r
Starting program: /home/wyq/Linux-C1/di3zhang/lfindbsearch/lfind 
nihao
nihao not found!

Program received signal SIGSEGV, Segmentation fault.
0x00920e0b in strlen () from /lib/libc.so.6
(gdb) q
好像意思是strlen()的原因,可我觉得不是。。。  

求解:谢谢.
[解决办法]
段错误 -- 非法使用内存,大部分是指针没有初始化或数组越界 
[解决办法]

offset=(char*)lfind(key,base,&nmemb,size,compar);
应该是:offset=(char*)lfind(key,data,&nmemb,size,compar);吧

热点排行