【发布时间】:2016-10-14 09:53:09
【问题描述】:
我对 C++ 和指针编程非常陌生。我试图将一个参数传递给一个线程,向它添加一个参数,然后返回一个指向该结果的指针。主线程应该只打印返回指针指向的结果。
#include<stdio.h>
#include<pthread.h>
#include<iostream>
using namespace std;
void* calculator(void* _n) {
int* n = (int*) _n;
int* i;
int result = *n + 1;
i = &result;
return i;
}
int main(){
int input;
pthread_t calcThread;
void* exitStatus;
int* threadResult;
cout << "Input integer: " << endl;
cin >> input;
cout << "Init thread..." << endl;
pthread_create(&calcThread, NULL, calculator, &input);
pthread_join(calcThread, &exitStatus);
// Error around here?
threadResult = (int*) exitStatus;
cout << "Returned: " << *threadResult << endl;
}
代码可以编译,但执行时出现分段错误。我的猜测是这与我正在做的演员阵容有关,但我不知道是什么。
任何帮助将不胜感激!
【问题讨论】:
-
您返回一个指向自动变量(位于该线程的堆栈上)的指针。因此,当线程函数退出时,该堆栈及其内容不再存在。由于您从 main 传递了一个指向
int的指针,因此只需使用_n将结果存储在其中。 -
int 结果 = *n + 1; // local 变量的地址,因为如果函数返回,它将变得无效。
标签: c++ pointers casting segmentation-fault pthreads