sim*_*mon 1 c pthreads segmentation-fault
我有以下代码用于测试如何使用pthread_exit()
和"实现返回值" pthread_join()
.
#include <stdio.h>
#include <pthread.h>
void* busy() {
int returnValue = 2;
pthread_exit((void*)&returnValue);
}
int main() {
void* retVoidPtr = NULL;
int* retValPtr = NULL;
int retVal;
pthread_t busyThread;
pthread_create(&busyThread, NULL, busy, NULL);
pthread_join(busyThread, &retVoidPtr);
retValPtr = (int*) retVoidPtr;
retVal = *retValPtr;
printf("Busy thread returned %d\n", retVal);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序编译良好,但从未得到printf
声明.该行发生了一个段错误retVal = *retValPtr
.使用gdb,我可以看到retValPtr
指针不再,NULL
但是当我尝试print *retValPtr
gdb时说"无法访问地址0x处的内存......".我出错的任何建议?
在最佳情况下,AC函数不能返回指向堆栈上的值的指针.但是,如果该堆栈是已终止的线程的堆栈,那么我们正在谈论完全的灾难,因为该线程的堆栈的内存可能不再被映射 - 这似乎就是这里的情况.
您的线程函数需要返回一个指向数据的指针,该指针在线程终止时将保持有效:全局变量或从中获取的块malloc()
.
归档时间: |
|
查看次数: |
523 次 |
最近记录: |