gpt4 book ai didi

c++ - pthread_create 段错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:42 26 4
gpt4 key购买 nike

我在我的程序中使用“pthread_create”方法,并在该方法中出现段错误。
什么可能导致这个?我正在使用正确的参数类型调用此函数!

这是代码:

pthread_t* _daemon;


void* writer(void* arg){
// stuff that dont involve "arg"...
}


int initdevice(){
if(pthread_create(_daemon, NULL, &writer, NULL) != 0) //seg in this line
{

cerr << "system error\n";
return ERR_CODE;
}
return SUCCESS;
}

int main () {
initdevice();
return 0;
}

注意:在调用 pthread_create 中的 writer 之前,我也尝试在没有“&”的情况下运行它,而且 - 我们尝试向该方法发送一些 void* 参数而不是最后一个 NULL 参数。

最佳答案

您的问题在这里:

pthread_t* _daemon;

这应该是:

pthread_t  daemon;

然后更改对 pthread_create 的调用:

if(pthread_create(&daemon, NULL, &writer, NULL) != 0)

想法是 pthread_create 获取一个指向现有 pthread_t 对象的指针,以便它可以填充详细信息。您可以将其视为构造函数的 C 版本。最初 pthread_t 对象未初始化,这将对其进行初始化。

此外,您的代码仍然可能不会始终有效,因为您不会等待线程完成。确保你的主线程没有在所有 child 之前完成:

int main () 
{
initdevice();
pthread_join(daemon, NULL); // wait for the thread to exit first.
return 0;
}

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

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