gpt4 book ai didi

c++ - 当分配的字符串上带有指针的分配结构作为 pthread 的参数传递时,指针丢失

转载 作者:行者123 更新时间:2023-11-27 23:32:20 24 4
gpt4 key购买 nike

我正在编写一个服务器,它为每个传入请求启动一个线程。我想将请求的参数和其他一些东西传递给线程。为此,我使用了一个结构,该结构已分配并包含指向已分配字符串的指针。我这样做是为了即使在主线程进入其下一个循环时也能使线程的结构保持事件状态。当我将指向该结构的指针传递给我的线程时,结构中应该指向字符串的指针“丢失”了它的信息。嗯,我得到一个 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);
...
}
}

最佳答案

您正在将一个指针的地址(即一个指向一个指针的指针)传递给pthread_create,但是您想要传递的是什么是您的 _thdata 对象的地址。您需要将指针传递给对象本身,例如:

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

此外,这里不需要转换为 void*

关于c++ - 当分配的字符串上带有指针的分配结构作为 pthread 的参数传递时,指针丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4230653/

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