当前位置: 技术问答>linux和unix
求助---Segmentation Fault - core dumped错误
来源: 互联网 发布时间:2015-03-03
本文导语: 这个程序(只是部分)实现简单聊天服务端,编译没错误,但执行时出现Segmentation Fault - core dumped错误。帮忙看看,辛苦了。 int main() { int server_fd,client_fd[MAX]; struct sockaddr_in server_addr; struct sockaddr_in client_addr[M...
这个程序(只是部分)实现简单聊天服务端,编译没错误,但执行时出现Segmentation Fault - core dumped错误。帮忙看看,辛苦了。
int main()
{
int server_fd,client_fd[MAX];
struct sockaddr_in server_addr;
struct sockaddr_in client_addr[MAX];
int sin_size,numbytes;
char buff[256];
int i;
fd_set sockset;
//建立TCP套接口
if(-1==(server_fd=socket(AF_INET,SOCK_STREAM,0)))
{
perror("Socket create error!");
exit(1);
}
//初始化结构体,并绑定端口
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(2003);
server_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_addr.sin_zero),8);
//绑定套接口
if(-1==(bind(server_fd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))))
{
perror("Bind error!");
exit(1);
}
//创建监听套接口
if(-1==(listen(server_fd,10)))
{
perror("Listen error!");
exit(1);
}
printf("Server is ready!");
//等待连接
while(1)
{
FD_ZERO(&sockset);
FD_SET(server_fd,&sockset);
for(i=0;i0)
{
FD_SET(client_fd[i],&sockset);
fcntl(client_fd[i],F_SETFL,O_NDELAY);
}
}
select(MAX+2,&sockset,NULL,NULL,NULL);
if(FD_ISSET(server_fd,&sockset))
{
i=free_fd(client_fd);
if(-1==(client_fd[i]=accept(server_fd,(struct sockaddr *)&client_addr[i],&sin_size)))
{
perror("accept error");
exit(1);
}
}
for(i=0;i0)
{
if(FD_ISSET(client_fd[i],&sockset))
{
if(-1==(numbytes=recv(client_fd[i],buff,256,0)))
{
perror("recv error");
exit(1);
}
buff[numbytes]='';
handle(buff,client_fd);
}
}
}
}
}
int main()
{
int server_fd,client_fd[MAX];
struct sockaddr_in server_addr;
struct sockaddr_in client_addr[MAX];
int sin_size,numbytes;
char buff[256];
int i;
fd_set sockset;
//建立TCP套接口
if(-1==(server_fd=socket(AF_INET,SOCK_STREAM,0)))
{
perror("Socket create error!");
exit(1);
}
//初始化结构体,并绑定端口
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(2003);
server_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_addr.sin_zero),8);
//绑定套接口
if(-1==(bind(server_fd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))))
{
perror("Bind error!");
exit(1);
}
//创建监听套接口
if(-1==(listen(server_fd,10)))
{
perror("Listen error!");
exit(1);
}
printf("Server is ready!");
//等待连接
while(1)
{
FD_ZERO(&sockset);
FD_SET(server_fd,&sockset);
for(i=0;i0)
{
FD_SET(client_fd[i],&sockset);
fcntl(client_fd[i],F_SETFL,O_NDELAY);
}
}
select(MAX+2,&sockset,NULL,NULL,NULL);
if(FD_ISSET(server_fd,&sockset))
{
i=free_fd(client_fd);
if(-1==(client_fd[i]=accept(server_fd,(struct sockaddr *)&client_addr[i],&sin_size)))
{
perror("accept error");
exit(1);
}
}
for(i=0;i0)
{
if(FD_ISSET(client_fd[i],&sockset))
{
if(-1==(numbytes=recv(client_fd[i],buff,256,0)))
{
perror("recv error");
exit(1);
}
buff[numbytes]='';
handle(buff,client_fd);
}
}
}
}
}
|
把生成的core文件拷贝到可执行文件目录,运行dbx 可执行文件
用t查看是什么错误
用t查看是什么错误
|
最好跟踪一下,看看错误出现在哪一步?