C++ 使用MPI和C+发送静态内存2D数组+;

C++ 使用MPI和C+发送静态内存2D数组+;,c++,mpi,C++,Mpi,我在使用MPI发送阵列时遇到一些问题。我现在有一个数组叫做静态内存的位置。我以递归的方式逐渐填充数组。最后,我将阵列发送到从属处理器以完成填充 const int SIZE = 8; const int DEPTH = 3 ; void recursion(int column, int positions[SIZE], int rank, int numtasks) { //other code positions[DEPTH] = row; MPI_Send(&posi

我在使用MPI发送阵列时遇到一些问题。我现在有一个数组叫做静态内存的位置。我以递归的方式逐渐填充数组。最后,我将阵列发送到从属处理器以完成填充

const int SIZE = 8;
const int DEPTH = 3 ;

void recursion(int column, int positions[SIZE], int rank, int numtasks) {
  //other code
  positions[DEPTH] = row;
  MPI_Send(&positions, SIZE, MPI_INT, r, 1, MPI::COMM_WORLD) ;
  //other code }

int main() {
  int positions[SIZE];
  MPI::Init();
  rank = MPI::COMM_WORLD.Get_rank();
  numtasks = MPI::COMM_WORLD.Get_size();
  char name[MPI::MAX_PROCESSOR_NAME];
  memset(name,0,MPI::MAX_PROCESSOR_NAME);
  MPI::Get_processor_name(name,len);
  memset(name+len,0,MPI::MAX_PROCESSOR_NAME-len);
  if(rank == MASTER) {
    recursion(0, positions, rank, numtasks); }
  if(rank != MASTER) {
  MPI_Recv(&positions, SIZE, MPI_INT, 0, MPI::ANY_TAG, MPI::COMM_WORLD, &stat);
使用cout函数,我成功地发现发送前的positions数组是:

0 2 4 0 1055625616 32621 4252832 0 
第二个0后面的数字是我尚未填充的数组点。但recv后的位置数组为:

-196000928 32767 -196001336 3 -1769860728 54 1047301632 32621 
即使在主处理器上更改阵列上的数字,从处理器也始终接收相同的阵列


有人能告诉我哪里出了问题,以及如何修复这些阵列吗?

错误在行
MPI\u Send(&positions,SIZE,MPI\u INT,r,1,MPI::COMM\u WORLD)。您不应该使用
位置
,而应该使用
位置
<代码>位置
类型是
int*
,因此
位置
类型是
int**
,在这种情况下,您实际上只是发送垃圾,而不是真正的数组。

谢谢!我真的很想马上向您发送internet cookies。请注意,这只适用于
recursion()
positions
参数。在主函数
中,positions
positions
是具有相同内存地址的指针,尽管类型不同,因此
MPI_Recv
调用有效。