mpi发送变量时程序会崩溃

我在网上找到的一个mpi发送自定义结构体的例子,自己改了改之后发现发送并没有什么问题,但他本身是发送一个结构体的成员变量,同时又用这个结构体来接收成员变量,我就想要用另外一个同类型的结构体来接收变量试一试,结果程序直接就崩溃了,提示的错误也不能查出来到底是什么情况。

typedef struct{
    int num1;
    double num2;
    char str[5];
}saonima;

typedef struct{
    int num1;
    int num2;
    saonima* points;
}testStruct;

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);

    assert(size >= 2);

    const int npts_avail = 20;
    saonima sst[npts_avail];

    testStruct list;
    testStruct list2;
    list.points = sst;

    if(rank == 0)
    {
        int npts_used = 10;
        list.num1 = npts_used;
        list.num2 = npts_avail;
        for (int i = 0; i < list.num1; ++i) {
            sst[i].num1 = 1 * i;
            sst[i].num2 = -2 * i;
            strcpy(sst[i].str, "yeah");
        }
    }

    const int nfields = 3;
    MPI_Aint disps[nfields];
    int blocklens[] = {1, 1, 5};
    MPI_Datatype types[] = {MPI_INT, MPI_DOUBLE, MPI_CHAR};

    disps[0] = offsetof(saonima, num1);
    disps[1] = offsetof(saonima, num2);
    disps[2] = offsetof(saonima, str);

    MPI_Datatype istruct, pstrcut;
    MPI_Type_create_struct(nfields, blocklens, disps, types, &istruct);
    MPI_Type_create_resized(istruct, 0, (char*)&(sst[1]) - (char*)(&sst[0]), &pstrcut);
    MPI_Type_commit(&pstrcut);

    if(rank == 0){
        MPI_Send(&(list.num1), 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
        MPI_Send(&(list.num2), 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
        MPI_Send(list.points, list.num1, pstrcut, 1, 0, MPI_COMM_WORLD);
    }else if(rank == 1){
        MPI_Recv(&(list.num1), 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
        MPI_Recv(&(list.num2), 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
        MPI_Recv(list.points, list.num1, pstrcut, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
    }

    if(rank == 1){
        cout << "Received: \n";
        for (int i = 0; i < list.num1; ++i) {
           cout << "(" << list.points[i].num1 << ", " << list.points[i].num2 << "):" << list.points[i].str << "\n";
        }
    }

    MPI_Finalize();
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7772248
  • 这篇博客也不错, 你可以看下变量名错误;变量还没有定义,就直接使用;变量的输入与使用顺序不当;数据输入时,数据的类型不匹配
  • 除此之外, 这篇博客: 【免费测试】姓名测算性别—仅需这几步即可:来看程序员是如何解决的?爱了爱了~中的 🐳导语 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    “可能光看名字,别人就觉得你是男生还是女生?”

                                            ——来源《生活》顾木子说的🤣

    以前上英语课老师都会教哪些名字一听就知道是男生的,比如David、Tom、Jerry,然后

    Angela、Sophia一听就是女生的名字。当你以为所有名字一听就可以辨别男女的时候,你就

    想错了~就像中文里面“贾凡”,你以为是男生,其实是女生也说不定。这种难分性别的名字

    其实很多呢~为了避免宝宝的性别和提前取好的名字冲突,很多准妈妈会给自己的孩子取一个

    中性的名字,不管男女都可以用哈哈哈~两全其美👧👦

    ​每个女孩子都希望自己的姓名能取的好听一点儿,也不希望经常跟男孩子名字撞名吧~想想一个班

    里面一个男生一个女生名字撞了多尴尬,如果名字偏女孩子一点儿,男生叫这个名字那可能就尴尬

    癌都犯了,相反也是!

    当然,送大家一句经典台词抢救一下:“你不尴尬🕵️‍♀️——尴尬的就是别人!“

    👩‍🎨哈哈哈!那下面就说到正题了哈:今天小编教大家编写一款根据中文名能猜测性别的一款界面

    化的小程序呢~


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^