当分配的结构与指定的字符串上的指针作为pthread的参数传递时,指针会丢失

时间:2010-11-20 01:02:15

标签: c++ struct pthreads arguments exc-bad-access

我正在编写一个服务器,为每个进入请求启动一个线程。 我想将请求的句子和其他一些东西传递给线程。 为此,我使用一个struct,它被分配并包含一个指向已分配字符串的指针。即使主线程进入下一个循环,我这样做是为了保持线程的结构活动。 当我将指向此结构的指针传递给我的线程时,结构中指向字符串的指针“丢失”了它的信息。 好吧,我得到一个EXC_BAD_ACCESS,我不知道为什么。

欢迎任何帮助: - )

typedef struct _thdata
{
    int socket;
    int thread_no;
    char *parameter;
}thdata;

void *thread_function(thdata *data)
{
    printf("Thread %i: got:%s\n",
            data->thread_no, data->parameter);<-EXC_BAD_ACCESS
    ...
    free data->parameter;
    free data;
    pthread_exit((void *)0);
}

int main(...)
{   ...
    while(1){
    ...
       thdata *data;
       data = (thdata*)malloc(sizeof(data));
       data->socket=connSocket;
       data->thread_no=i;
       data->parameter=(char*)malloc(strlen(param)+1);
       strcpy(data->parameter, param);
    ...
       pthread_create( &p_thread, NULL, (void *(*)(void *))thread_function, 
                    (void*) &data);
    ...
    }
}

1 个答案:

答案 0 :(得分:4)

您将指针的地址(即指向的指针)传递给pthread_create,但您要传递的是地址您的_thdata对象。您需要将指针传递给对象本身,如:

pthread_create(&p_thread, NULL, thread_function, data);

此外,此处无需转发void*