Ho passato il puntatore come avete detto. Questo è il codice:
// esercizi per provare a usare strutture
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>
struct argThread{
int indice;
float **matrix;
int dimensione;
float *ptr;
};
typedef struct argThread argT;
float **allocaMatrix(int dim);
void *funct(void *prova );
int main(int argc,char *argv[]){
argT *prova;
float *array;
int indice=1,dimensione=3;
array=(float*)malloc(sizeof(float)*dimensione);
float **matrice,*ptr;
matrice=allocaMatrix(dimensione);
prova=(argT*)malloc(sizeof(argT));
prova->matrix=matrice;
(prova->matrix)[0][0]=5;
printf("elem matrice: %f \n",(prova->matrix)[0][0]);
prova->indice=indice;
printf("indice: %d \n",prova->indice);
prova->dimensione=dimensione;
printf("dimensione: %d \n",prova->dimensione);
int i;
for(i=0;i<dimensione;i++){
array[i]=i+2;
}
prova->ptr=&array[0];
printf("array: %f \n",*((prova->ptr)+2));
//inizio thread
pthread_t tid;
void *status;
pthread_create(&tid,NULL,funct,&prova);
pthread_join(tid,status);
printf("elem matrice: %f \n",(prova->matrix)[0][0]);
}
float **allocaMatrix(int dim){
float **matrix;
int i,j;
matrix=(float**)malloc(sizeof(float*)*dim);
for (i=0;i<dim;i++){
matrix[i]=(float*)malloc(sizeof(float)*dim);
}
for (i=0;i<dim;i++){
for (j=0;j<dim;j++){
matrix[i][j]=0;
}
}
return matrix;
}
void *funct(void *prova){
(prova->matrix)[0][0]=15;
printf("elem matrice: %f \n",(prova->matrix)[0][0]);
}
il problema è che non posso usare in questo modo gli attributi definiti nella struttura. Come fare?
p.s.
non ho capito se @migliorabile intendeva che non è possibile usare un puntatore alla struttura e bisogna quindi utilizzare altri metodi come liste ad esempio (vettori non credo si possa fare perchè sono tipi di dati diversi e sinceramente le mappe e le classi custom non le ho mai usate e non so neanche precisamente cosa siano).