【问题标题】:Segmentation fault in thread线程中的分段错误
【发布时间】:2013-04-08 12:17:34
【问题描述】:

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

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

发送线程的代码是:

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);

【问题讨论】:

  • client_sock 的数据类型是什么?

标签: c multithreading sockets segmentation-fault


【解决方案1】:

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

应该是……

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

【讨论】:

    猜你喜欢
    • 2020-02-29
    • 2018-04-25
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2015-06-09
    相关资源
    最近更新 更多