当前位置:  技术问答>linux和unix

高手帮下忙 运行时段错误怎么回事

    来源: 互联网  发布时间:2016-04-03

    本文导语:  以下是客户端 #include #include #include #include #include #include #include #include #include #include #include #include #define BUFFER_SIZE 1000 #define SER_PORT 3999 struct send_data_buffer { char buffer[BUFFER_SIZE]; pthread_mutex_t lock; pthread_cond_t send_dat...

以下是客户端

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define BUFFER_SIZE 1000
#define SER_PORT 3999

struct send_data_buffer
{
char buffer[BUFFER_SIZE];
pthread_mutex_t lock;
pthread_cond_t send_data_able;
pthread_cond_t write_data_able;
int buffer_full;
};

struct receive_data_buffer
{
char buffer[BUFFER_SIZE];
pthread_mutex_t lock;
pthread_cond_t receive_data_able;
pthread_cond_t read_data_able;
int buffer_empty;
};

char ser_IP[]={"192.168.0.115"};
struct send_data_buffer *send_buffer;
struct receive_data_buffer *receive_buffer;

void send_buffer_init(struct send_data_buffer *b)
{
pthread_mutex_init(&b->lock,NULL);
pthread_cond_init(&b->send_data_able,NULL);
pthread_cond_init(&b->write_data_able,NULL);
b->buffer_full=0;
}

void receive_buffer_init(struct receive_data_buffer *b)
{
pthread_mutex_init(&b->lock,NULL);
pthread_cond_init(&b->receive_data_able,NULL);
pthread_cond_init(&b->read_data_able,NULL);
b->buffer_empty=1;
}

void *transmission(void *data)
{
 pid_t child1,child2;
 int sockfd, numbytes,status1,status2; 
 char buf[BUFFER_SIZE];
 struct hostent *he;
 struct sockaddr_in ser_addr;  
  if((he=gethostbyname(ser_IP))==NULL)
 { 
  herror("gethostbyname error"); 
  exit(1); 
 }
 if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
 { 
  perror("socket create error"); 
  return; 
 }
 ser_addr.sin_family = AF_INET; 
 ser_addr.sin_port = htons(SER_PORT); 
 ser_addr.sin_addr = *((struct in_addr *)he->h_addr); 
 bzero(&(ser_addr.sin_zero),8); 
 if (connect(sockfd, (struct sockaddr *)&ser_addr, sizeof(struct sockaddr)) == -1)
 {
  perror("connect error"); 
  return;
 }
 if(!(child1=fork()))
  {
  int len;
  while(1)
  {
  pthread_mutex_lock(&send_buffer->lock);
while(send_buffer->buffer_full==0)
{
  pthread_cond_wait(&send_buffer->send_data_able,&send_buffer->lock);
}
len = strlen(send_buffer->buffer);
  if (send(sockfd,send_buffer->buffer,len, 0) == -1)
   {
    perror("send error"); 
return;
   }
send_buffer->buffer_full=0;
pthread_cond_signal(&send_buffer->write_data_able);
pthread_mutex_unlock(&send_buffer->lock);
  }
exit(0);
  }
 if(!(child2=fork()))
  {
  char buf[BUFFER_SIZE];
  while(1)
  {
 if (( numbytes = recv(sockfd, buf, BUFFER_SIZE, 0)) == -1||numbytes==0)
 { 
  perror("recv error"); 
 }
 buf[numbytes] = '';
 pthread_mutex_lock(&receive_buffer->lock);
 while(receive_buffer->buffer_empty==0)
  {
 pthread_cond_wait(&receive_buffer->receive_data_able,&receive_buffer->lock);
  }
 strcpy(receive_buffer->buffer,buf);
 receive_buffer->buffer_empty=0;
 pthread_cond_signal(&receive_buffer->read_data_able);
 pthread_mutex_unlock(&receive_buffer->lock);  
}
  }
 waitpid(child1,&status1,0);
 waitpid(child2,&status2,0);
 close(sockfd);
 return; 
}


void *infor_format(void *data)
{
pid_t child1,child2;
int status;
if(!(child1=fork()))
{
char buf[BUFFER_SIZE]; 
while(1)
{
gets(buf);
//buf=strcat("client send:",buf);
//buf=strcat(buf,'n');
  pthread_mutex_lock(&send_buffer->lock);
while(send_buffer->buffer_full==1)
{
  pthread_cond_wait(&send_buffer->write_data_able,&send_buffer->lock);
}
strcpy(send_buffer->buffer,buf);
send_buffer->buffer_full=1;
pthread_cond_signal(&send_buffer->send_data_able);
pthread_mutex_unlock(&send_buffer->lock);
}
}
if(!(child2=fork()))
{
char buf[BUFFER_SIZE];
while(1)
{
 pthread_mutex_lock(&receive_buffer->lock);
 while(receive_buffer->buffer_empty==1)
  {
 pthread_cond_wait(&receive_buffer->read_data_able,&receive_buffer->lock);
  }
 
 strcpy(buf,receive_buffer->buffer);
// buf=strcat("client receive:",buf);
// buf=strcat(buf,'n');
 puts(buf);
 receive_buffer->buffer_empty=1;
 pthread_cond_signal(&receive_buffer->read_data_able);
 pthread_mutex_unlock(&receive_buffer->lock);
}
}
 waitpid(child1,&status,0);
 waitpid(child2,&status,0);
 close(sockfd);
}

int main(void)
{
pthread_t th_a,th_b;
void *retval;
send_buffer_init(send_buffer);
receive_buffer_init(receive_buffer);
pthread_create(&th_a,NULL,transmission,0);
pthread_create(&th_b,NULL,infor_format,0);
pthread_join(th_a,&retval);
pthread_join(th_b,&retval);
return 0;
}




以上我写的SOCKET通信的客户端 能编译通过 
但是在运行的时候出现了“段错误”的提示
高手帮下忙 这是怎么回事



|
没有给
struct send_data_buffer *send_buffer; 
struct receive_data_buffer *receive_buffer; 
这两个指针分配内存


|
struct send_data_buffer *send_buffer;
struct receive_data_buffer *receive_buffer; 

这两个指针没有进行初始化,你后面的操作是对其进行空指针操作,所以会报段错误。

|
pintf打印输出,或者gdb调试,段错误一般是你内存操作溢出。很容易找到

|
一般来说段错误是指针问题造成的

    
 
 

您可能感兴趣的文章:

  • xawtv没图像是怎么回事?高手请进
  • 哪位高手能替兄弟解释一下,Struts是怎么回事?
  • 请教高手这是怎么回事?? 虚拟机上装 redhat linux
  • 各位高手,小弟在安装Java 2 SDK Standard Edition v1.3时出错了。是怎么回事?
  • HTML教程 iis7站长之家
  • 装了redhat9,windows2000启动特别慢,怎么回事,请高手指教。
  • linux 启动错误,高手看看怎么回事~~谢
  • 请高手指点,如下错误是怎么回事?
  • red hat linux与windows 2000 server相连,2000 关机后linux自动启动!问高手怎么回事?
  • 这个错误是怎末回事?Java高手帮忙看看
  • linux编译的内核不能启动,是怎么回事,请高手指教!
  • linux安装php安装不了,请问高手这是什么回事?在线等回复,回复的都有高分!!!
  • 请问刚安装好JDK后,在任何目录下可使用JAVA,但不能使用JAVAC,JAVAH等是怎么回事?(请高手帮忙,分数20))
  • 使用redhat6.2的问题!!安装成功,却进不去??这是怎么回事,高手请进!
  • Invalid character in input这是在那么回事啊,急切啊,高手请进
  • 哪位部署过j2ee的高手知道这是怎麽回事?javax.naming.NoInitialContextException:Need to...
  • 在linux下安装oracle时,使用sysctl检查系统参数时出现许多error信息,不知道怎么回事,望高手指点!
  • 高手们:帮我看看这是怎么回事吧。调用EJB。
  • 高手帮下忙 这事怎么回事啊 在线等
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高手救命,很急——ORACLE817安装在UNIXWARE711上,手工启动数据库后在netasst中连接错误,高手帮我看看?
  • 高手帮我看看这个错误怎么解决?
  • JAVA高手救命,如何对JSP程序进行错误控制!
  • ftp错误,请高手帮分析一下
  • 内核启动错误,高分请高手指点。。。
  • linux高手请帮忙,系统崩溃,段错误!!!
  • !!!!!警告:Mandrake Linux 9.0 安装错误,各位小心刻盘,还请高手相助!!!!!
  • 问题太难,请教高手,关于raid1功能的错误检测的实现
  • 一个奇怪的错误,请高手解答
  • 请教高手,如下编译错误是什么原因
  • 用rose试图生成java代码,提示如下错误,求教高手!
  • 高手帮帮忙,编译错误,在线等
  • Linux 多线程出现段错误 高手请进啊!
  • linux环境下发邮件报错误,往高手指教
  • jsp中找不到表的错误,急!!!请高手指教。
  • 不知道为什么一直报这个错误请那个高手指点一下
  • 安装linux出现“Install bootloader"错误怎么办?请高手指点!
  • 急!!!请问各位高手 java.lang.NullPointerException 这是什么错误,怎么排除? 在下多谢了!
  • fedora 下的错误,高手指教
  • EJB (实体BEAN)部署时发生错误:请高手帮忙看看.
  • 高手,高手,高高手请进!
  • 有熟悉EXIM的高手高手么??
  • to 高手:学java应该怎样一步步学习,从菜鸟到高手.
  • 高分请高手,高手定能解决
  • 请问高手在linux中用什么命令可以做linux的启动盘???在等待高手??
  • 有高手研究Agent++麽?里面有个thread.h,蛮难读的,请高手指点
  • 难道高手区里的人就是高手?
  • 在dos下用bc31挑战高手******开发mssql程序,连接时报link err:undefined symbol GETNOTE in module DBEXTERN?(挑战高手)
  • 真正的linux高手,请看过来,看你符合高手标准不?
  • 难道这没有高手吗?难道这没有乐于助人的高手?(高分酬谢62+50+50)
  • 关于我对linux高手用yum,非高手用源码的理由


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3