尝试将动态数组传递给进程时出现分段错误

Segmentation fault when trying to pass dynamic array to processes

我试图将动态数组从 0 进程传递到 1,反之亦然。在过程 1 中出现分段错误。所有矩阵均按预期打印。在这种情况下可能是什么问题?

int main(int argc, char **argv){
  MPI_Init(&argc,&argv);
  int n;
  cin >> n; 
  int *matrix = new int[n*n];
  int *matrix2 = new int[n*n];
  int i,j,ProcNum,ProcRank;
  MPI_Comm_size(MPI_COMM_WORLD, &ProcNum);
  MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank);
  MPI_Status status;
  if (ProcRank == 0){
    /* Filling matrices here with i*n + j values*/
    MPI_Send(&n, 1, MPI_INT, 1, 1, MPI_COMM_WORLD);
    MPI_Send(&(matrix[0]), n*n, MPI_INT, 1, 2, MPI_COMM_WORLD);
    MPI_Recv(&(matrix[0]), n*n, MPI_INT, 1, 2, MPI_COMM_WORLD, &status);
    print_matrix(matrix,n);
  }
  if (ProcRank > 0) {
    MPI_Recv(&n, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);
    MPI_Recv(&(matrix[0]), n*n, MPI_INT, 0, 2, MPI_COMM_WORLD, &status);
    /*passing i-j values to matrix and printing them here*/
    MPI_Send(&(matrix[0]), n*n, MPI_INT, 0, 2, MPI_COMM_WORLD);
  }
  MPI_Finalize();
  delete matrix;
  delete matrix2;
  return EXIT_SUCCESS;
}

并行程序中的交互式输入总是很危险的。您的 MPI 进程通常是通过 ssh 连接启动的,因此它们可能不会获得终端输入。进程零很可能会,所以我提倡只在进程零上阅读 n 然后广播它。