Я хочу отправить массив двухмерных указателей, и каждый процесс добавляет 1 к своему элементу, вот мой код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mpi.h"
функция для выделения непрерывной памяти
int **alloc_2d_int(int rows, int cols) {
int *data = (int *)malloc(rows*cols*sizeof(int));
int **array= (int **)malloc(rows*sizeof(int*));
int i;
for (i=0; i<rows; i++)
array[i] = &(data[cols*i]);
return array;
}
вот мой основной там есть некоторые логики c внутри, но не имеют ничего с ошибкой
int main(int argc, char * argv[])
{
int my_rank; /* rank of process */
int p; /* number of process */
int source; /* rank of sender */
int dest; /* rank of reciever */
int tag = 0; /* tag for messages */
char message[100]; /* storage for message */
MPI_Status status; /* return status for */
MPI_Init( &argc, &argv );
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_size(MPI_COMM_WORLD, &p);
int row1,col1;
int **mat1;
int i,j,k,val;
//slaves
if( my_rank != 0)
{
MPI_Recv(&row1,1,MPI_INT,dest,tag, MPI_COMM_WORLD,&status);
MPI_Recv(&col1,1,MPI_INT,dest,tag, MPI_COMM_WORLD,&status);
MPI_Recv(&(mat1[0][0]),row1*col1,MPI_INT,dest,tag, MPI_COMM_WORLD,&status);
for (i=0;i<row1;i++){
for (j=0;j<col1;j++){
mat1[i][j]++;
}
}
}
MPI_Send(&(mat1[0][0]),row1*col1,MPI_INT,dest,tag,MPI_COMM_WORLD);
//Master work
else
{
//take a matrix from user and it works fine
for (source=1; source<p; source++)
{
MPI_Send(&row1,1,MPI_INT,source,tag,MPI_COMM_WORLD);
MPI_Send(&col1,1,MPI_INT,source,tag,MPI_COMM_WORLD);
MPI_Send(&(mat1[0][0]),row1*col1,MPI_INT,source,tag,MPI_COMM_WORLD);
}
for (source=1; source<p; source++)
{
MPI_Recv(&rows,1,MPI_INT,source,tag, MPI_COMM_WORLD,&status);
MPI_Recv(&counter,1,MPI_INT,source,tag, MPI_COMM_WORLD,&status);
MPI_Recv(&(mat1[0][0]),row1*col1,MPI_INT,source,tag, MPI_COMM_WORLD,&status);
printf("%d %d\n",counter,rows);
}
for(i=0; i<row1; i++)
{
for(j=0; j<col1; j++)
{
printf("%d ",mat1[i][j]);
}
printf("\n");
}
}
}
/* shutdown MPI */
MPI_Finalize();
return 0;
}
, когда я запускаю этот код с 4-мя процессами, это дает мне эту ошибку
ранг 2 i в задании 19 статус ранга 2: убит сигналом 9
ЛЮБЫЕ СОВЕТЫ