从线程原因取消引用返回的指针;分段错误:11

时间:2016-10-14 09:53:10

标签: c++ pointers casting segmentation-fault pthreads

我对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;
}

代码编译,但执行时出现分段错误。我的猜测是它与我正在做的演员有关,但我无法弄清楚是什么。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

i = &result;

您正在返回指向局部变量的指针。一旦超出范围,访问它就会产生未定义的行为。