я получил следующую структуру C:MPI: Отправка массива структуры, содержащей указатель
typedef struct chromosome{
int *genes;
float cout;
}chromosome;
Я хотел бы послать массив хромосом с использованием MPI_Send. Я определил тип данных MPI_CHROMOSOME так:
MPI_Datatype MPI_CHROMOSOME;
MPI_Datatype TYPES_ELEMENTAIRES[2] = {MPI_INT, MPI_FLOAT};
int blocklengths[2] = {NB_SOMMETS,1}; //NB_SOMMET is a known integer value at this point (number of elements of the "genes" array)
MPI_Aint offsets[2];
offsets[0] = offsetof(chromosome, genes);
offsets[1] = offsetof(chromosome, cout);
MPI_Type_create_struct(2, blocklengths, offsets, TYPES_ELEMENTAIRES, &MPI_CHROMOSOME);
MPI_Type_commit(&MPI_CHROMOSOME);
Затем я попытался отправить массив хромосом:
chromosome *sub_pop = malloc(taille_sub_pop*sizeof(chromosome));//taille_sub_pop is a known integer value
/* ... Fills sub_pop with chromosomes ...*/
MPI_Send(sub_pop,taille_sub_pop,MPI_CHROMOSOME, 1, 3, MPI_COMM_WORLD);
... Но я получил ошибку (BAD РАСТОРЖЕНИЕ одного из ваших ПРОЦЕССЫ ПРИМЕНЕНИЯ ... Код выхода 139 ... ВАША ПРИМЕНЕНИЕ, ПРЕКРАЩАЕМАЯ С ВЫХОДНОЙ СТРОКОЙ: Ошибка сегментации (сигнал 11)).
Как я могу отправить этот массив правильно? Буду признателен за вашу помощь. Большое спасибо.
Привет, спасибо за ваш ответ. В ссылке, которую вы мне отправили, я действительно хочу отправить массив такой структуры, а не только один элемент ... – Reda94