Я имею дело с динамически распределенными матрицами, и мне нужно отправлять / извлекать их из одного процесса в другой.
Я не уверен, правильно ли я это делаю, но иногда, с небольшими матрицами, это работает; но когда я увеличиваю их размеры, он получает эту ошибку:
[caio-A790GXM-AD3:03111] *** Process received signal ***
[caio-A790GXM-AD3:03111] Signal: Segmentation fault (11)
[caio-A790GXM-AD3:03111] Signal code: Address not mapped (1)
[caio-A790GXM-AD3:03111] Failing at address: (nil)
Вот основная часть, где я думаю, что ошибка может быть:
float **alocarMatriz(int linhas, int colunas) {
int i;
float *dado = (float *)calloc(linhas*colunas,sizeof(float));
float **array = (float **)calloc(linhas,sizeof(float*));
for(i = 0; i < linhas; i++)
array[i] = &(dado[colunas*i]);
return array;
};
if(taskid == MASTER) {
float **matriz;
matriz = alocarMatriz(numLin,numCol);
MPI_Send(&matriz[0][0], colunasAVT*colunasDAT, MPI_DOUBLE, dest, mtype, MPI_COMM_WORLD);
}
if(taskid > MASTER) {
float **matriz;
matriz = alocarMatriz(numLin,numCol);
MPI_Recv(&matriz[0][0], colunasAVT*colunasDAT, MPI_DOUBLE, MASTER, mtype, MPI_COMM_WORLD, &status);
}
Может кто-нибудь сказать мне, что не так?
EDIT:
Исправлен индекс Recv, также пытался запустить ту же программу, но с массивами фиксированного размера вместо calloc'd. В любом случае, безуспешно, это все еще указывает на ошибку сегментации.