C pthread_join() 生成分段错误



下面的代码在第二种情况下给出了seg错误,但在第一部分中它工作正常。 但他们都在做同样的事情.在这里,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 -> %dn",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 : %dn",status);
int *result;
pthread_join(pt,(void **)&result);
printf("Result is %dn",*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 %dn",**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 %dn", result);

也替换这个

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

通过这个

int *c = malloc(sizeof *c);

相关内容

  • 没有找到相关文章

最新更新