gpt4 book ai didi

C pthread_join() 产生段错误

转载 作者:行者123 更新时间:2023-11-30 14:55:54 27 4
gpt4 key购买 nike

下面的代码对于第二种情况给出了段错误,但对于第一部分它工作正常。但他们俩都在做同样的事情。这里 pthread_join() 调用不会生成任何错误,但是在打印 pthread_join() 的响应时,它会生成段错误。第一个与第二个所做的事情有何不同?第二个实际上错在哪里?

代码

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

void * thread_ops(void *arg){
printf("Thread Start!\n");
int val=((int *)arg)[0];
printf("value at thread -> %d\n",val);
int * c=(int *)malloc(sizeof(int *));
*c=val;
pthread_exit((void*)c);
}
int main(){
pthread_t pt,pt2;
pthread_attr_t ptatr;
int ar[1]={1};
// working
pthread_attr_init(&ptatr);
int status;
status=pthread_create(&pt,&ptatr,&thread_ops,ar);
printf("Thread Stats : %d\n",status);
int *result;
pthread_join(pt,(void **)&result);
printf("Result is %d\n",*result);
// why does the next set of lines generate seg fault ??
void **result2;
status=pthread_create(&pt,&ptatr,&thread_ops,ar);
pthread_join(pt,result2);
int ** res2=(int **)result2;
printf("Result is %d\n",**res2);
return 0;
}

输出

Thread Stats : 0
Thread Start!
value at thread -> 1
Result is 1
Thread Start!
value at thread -> 1
Segmentation fault (core dumped)

最佳答案

而不是

void **result2;
pthread_join(pt,result2);

使用

void *pvresult;
pthread_join(pt, &pvresult);

正如您所期望的 int 添加以下内容:

int result = *((int*) pvresult);

并以这种方式打印:

printf("Result is %d\n", result);
<小时/>

也替换这个

int * c=(int *)malloc(sizeof(int *));

按此

int *c = malloc(sizeof *c);

关于C pthread_join() 产生段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45242919/

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