C++ 使用MPI散点分布数字-错误

C++ 使用MPI散点分布数字-错误,c++,c,openmpi,C++,C,Openmpi,我做了一个简单的例子来理解MPI\u Scatter是如何工作的。我想为每个进程分配两个整数。 但我总是得到一个分割错误。我的代码有什么问题 void do_work(int val, int rank){ printf("I am rank number %d and i got the randval %d.\n",rank,val); } int main(int argc, char** argv){ MPI_Init(&argc,&argv);

我做了一个简单的例子来理解
MPI\u Scatter
是如何工作的。我想为每个进程分配两个整数。 但我总是得到一个分割错误。我的代码有什么问题

void do_work(int val, int rank){
    printf("I am rank number %d and i got the randval %d.\n",rank,val);
}

int main(int argc, char** argv){

    MPI_Init(&argc,&argv);

    int size, rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &size);
    MPI_Comm_size(MPI_COMM_WORLD, &rank);

    int M=2; 
    int N = M*size; 

    int * input;
    int * recv;

    if(rank==0){
        input = (int*)calloc(N, sizeof(int));
        for(int i=0;i<N; ++i) input[i]=10 + i;
    }

    recv = (*int)calloc(M, sizeof(int));

    MPI_Scatter(&input[0], M, MPI_INT,&recv[0],M, MPI_INT, 0, MPI_COMM_WORLD);

    for(int i=0; i<M; ++i) do_work(recv[i],rank);

    free(input);
    free(recv);
    MPI_Finalize();

return 0;
}
void do_工作(int val,int rank){
printf(“我是秩编号%d,我得到了randval%d.\n”,秩,val);
}
int main(int argc,字符**argv){
MPI_Init(&argc,&argv);
整数大小、等级;
MPI通信等级(MPI通信世界和规模);
MPI通信大小(MPI通信世界和排名);
int M=2;
int N=M*大小;
int*输入;
int*recv;
如果(秩==0){
输入=(int*)calloc(N,sizeof(int));

对于(int i=0;i我认为您的问题来自:

int size, rank;
MPI_Comm_rank(MPI_COMM_WORLD, &size);
MPI_Comm_size(MPI_COMM_WORLD, &rank);
rand
size
被交换,应该是:

int size, rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

我认为你的问题来自:

int size, rank;
MPI_Comm_rank(MPI_COMM_WORLD, &size);
MPI_Comm_size(MPI_COMM_WORLD, &rank);
rand
size
被交换,应该是:

int size, rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

为什么
c++
?故障发生在哪里?为什么
c++
?故障发生在哪里?哦,你是个英雄!没错,我因为这个愚蠢的错误损失了这么多小时!谢谢你的快速帮助。哦,你是个英雄!没错,我因为这个愚蠢的错误损失了这么多小时!谢谢你的快速帮助。