MPI_Gatherv 抛出分段错误

MPI_Gatherv throws up segmentation fault

我的目标是使用 abcd 输入打印 abbccccdddd。第一次使用Gatherv

int main(int argc, char *argv[])
{
    MPI_Init(&argc,&argv);
    int rank,size;
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);
    MPI_Comm_size(MPI_COMM_WORLD,&size);
    int n[100];
    MPI_Status status;
    int x,i=0,m;    
    int total[4];
    char str[100],str1[100],a1[100],a[100];

    if(rank==0){
        scanf("%s",str);
    }
    MPI_Scatter(str,1,MPI_CHAR,a,1,MPI_CHAR,0,MPI_COMM_WORLD);

    x=rank;
    while(i<=rank){
        a1[i]=a[0];
        i++;
    }
    int disps[4];
    int y=rank;
    disps[rank]=0;
    while(y!=0){
        disps[rank]+=y;
        y--;
    }
    total[rank]=rank+1;
    printf("%s\n",a1 );
    char k[100];

    printf("%d %d\n",total[rank],disps[rank] );
    MPI_Gatherv(a1,rank+1,MPI_CHAR,k,total,disps,MPI_CHAR,0,MPI_COMM_WORLD);

    if(rank==0){
        printf("Total %s\n",k);
    }



    MPI_Finalize();
    /* code */
    return 0;
}

在 运行 代码之后,total 和 disps 的 printf 值是正确的,但是程序抛出一个分段错误

根本原因是 totaldisps 都应该在根等级上组装(在您的示例中等级 0)。

它们目前是 "distributed",因此未在根等级上初始化,这会导致未定义的行为,例如崩溃。