MPI_Gatherv引发了分段错误

时间:2018-03-27 15:49:13

标签: mpi

我的目标是使用abcd输入打印abbcccdddd。这是我第一次使用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值是正确的,但程序会引发分段错误

1 个答案:

答案 0 :(得分:0)

根本原因是totaldisps都应该根据您的示例中的根级别排名(等级0。)

它们当前是“分布式的”,因此未在根级别上初始化,这会导致未定义的行为,例如崩溃。