Bonjour à tous,

Je désire envoyer une structure en MPI. Voila ma structure :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
typedef struct{
	float a;
	int* b;
}structure_t;
le b est alloué dynamiquement avec malloc(). Disons qu'il contienne n elements, je ne connais pas ce nombre à l'avance.

J'arrive très bien à envoyer cette structure quand elle est alloué non dynamiquement, avec :
par exemple, mais pas quand elle est alloué par un malloc.

Je créé ma structure MPI comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
    structure_t resultat;
    MPI_Datatype MPI_NOUVEAUTYPE;
    MPI_Datatype oldtypes[2];
    int blockcounts[2];
    MPI_Aint offsets[2];
 
    MPI_Address( &resultat.a, &offsets[0]);
    oldtypes[0] = MPI_FLOAT;
    blockcounts[0] = 1; //La longueur du parcours
 
    MPI_Address( &resultat.b, &offsets[1]);
    oldtypes[1] = MPI_INT;
    blockcounts[1] = n; //Le parcours
 
    offsets[1] -= offsets[0];
    offsets[0]=0;
 
    // On créé la structure et on la prépare
    MPI_Type_struct(2, blockcounts, offsets, oldtypes, &NOUVEAUTYPE);
A la reception, je ne peux pas acceder à mes données sous peine d'un seg fault. Tout se passe très bien quand ce n'est pas alloué dynamiquement par contre...

Vous avez une idée ?

Merci