#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
typedef struct {
double *presult;
} SomeData;
//Fonction that assigns the value to be pointed
void *assignValue(void *data) {
SomeData *aData = (SomeData*)data;
double valeurTotal = 45.50;
aData->presult = &valeurTotal; //Make the pointer point to the value
printf("%10.3f \n",*aData->presult); //Here it prints the right answer L 45.50
pthread_exit(NULL);
}
int main(int argc, char *argv[]) {
SomeData myData; // The struct
pthread_t onethread;
pthread_create(&onethread, NULL, assignValue,(void *)&myData);
pthread_join(onethread, NULL);
printf("**************************************** \n");
printf("%10.3f \n", (myData.presult)); // prints: 0
printf("%10.3f \n", *(myData.presult));// prints: 0
exit(0);
}
Вопрос может сбивать с толку, так что, надеюсь, эта упрощенная версия моего кода сможет объяснить лучше.В общем, я создал поток, который изменяет значения структуры.
Внутри функции потока структура передается как указатель.Одним из членов структуры является двойной указатель «presult».Функция thread заставляет 'presult' указывать на значение, и оно, кажется, работает, потому что печать работает.
Однако, возвращаясь к основной функции, я пытаюсь снова напечатать значение 'presult', ноон печатает не 45.50, а 0.0.
В моем полном коде я фактически получаю ошибку сегментации с последним отпечатком.Но даже в этом упрощенном коде это не работает.Он не печатает 45.50.
Вывод выглядит следующим образом:
45.50
****************************************
0.000
0.000
Любая помощь приветствуется.Спасибо.