gpt4 book ai didi

c - 线程中的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:45 26 4
gpt4 key购买 nike

我写了一个有两个线程的服务器程序。一个线程从客户端接收数据,另一个线程向客户端发送数据。两个线程都包含一个无限循环来发送和接收数据。

我的问题是,服务器接受连接并创建用于发送数据的线程,但是,我遇到了段错误并且服务器终止了。为什么?

发送线程的代码是:

void *send_data(void *num)
{
int *sock_s=(int *) num;
int sock=*sock_s;
char msg[50];
while(1)
{
fgets(msg,50,stdin);
printf("sending data");
if(strcmp(msg,"exit")==0)
{
break;
}
send(sock,msg,sizeof(msg),0);
}
send(sock,msg,strlen(msg),0);
}

以上线程创建者:

status_s=pthread_create(&thread_s,NULL,send_data,(void *)client_sock);

最佳答案

您传递的是客户端套接字,而不是指向客户端套接字的指针。您将 num 视为指针,因此您试图从可能是 3 或 4 或 5 之类的值的内存地址“读取”(套接字 ID,文件描述符表的索引)......这是一个内存冲突。

应该是……

void *send_data( void *num )
{
int sock = (int)num;
...

关于c - 线程中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15878828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com