Tir*_*esi 2 c pthreads segmentation-fault
当尝试访问 pthread_join 的第四个参数时,我遇到了分段错误。这是我的代码:
void* threadHandler(void* arg)
{
printf("arg: %c\n", *(char *) arg);
pthread_exit(0);
}
int main()
{
pthread_t threadA;
pthread_create(&threadA, NULL, threadHandler, "N");
void *retval;
pthread_join(threadA, &retval);
printf("retval: %d\n", *(int *) retval);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
知道为什么最后一个 printf 会导致分段错误吗?我如何解决它?(我的理解是 retval 应该包含 threadHandler 的返回值,所以在这种情况下,它应该是 0 对吧?)
提前致谢!
如果您了解pthread_join()将选择线程回调的返回值,那么您应该像这样返回
#include <stdio.h>
#include <stdint.h>
#include <pthread.h>
void *
threadHandler(void *data)
{
printf("arg: %s\n", (char *) data);
return (void *) 0;
}
int
main(void)
{
pthread_t thread;
const char *string;
void *number;
string = "N";
if (pthread_create(&thread, NULL, threadHandler, (void *) string) != 0)
return -1;
pthread_join(thread, &number);
printf("%d\n", ((int) (intptr_t) number));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但请注意,返回的地址0x00可能不是有效地址 -通常是NULL指针(void *) 0x00),因此只要您有兴趣使用指针的值作为要返回的整数,就应该这样做。
取消引用指针是未定义行为,但使用该值则不是。
| 归档时间: |
|
| 查看次数: |
5994 次 |
| 最近记录: |