MPI_Send/Recv c++ std::string分段错误

MPI_Send/Recv C++ std::string Segmentation Fault

本文关键字:string 分段 错误 std c++ Send Recv MPI      更新时间:2023-10-16

我在这里读了一堆页面,并发布了之前类似的问题,但无济于事,我似乎找不到一个可行的解决方案。

这是一个统一的分配,提供的代码开始,这是可怕的,但我们必须使用它:/我不是要求解决整个事情,只是MPI_Send和Recv,因为我被难住了。

主:

string parent; //Is initialised to a random sequence of characters before I try the send
int parentSize = parent.size()+1;
for (int i = 1; i < processes; i++)//Send current parent to slaves
{
    MPI_Send(&parentSize, sizeof(int), MPI_INT, i, MSIZE, MPI_COMM_WORLD); //This works fine
    MPI_Send(&parent, parent.size(), MPI_BYTE, i, MSEND, MPI_COMM_WORLD);
}
奴隶:

int parentSize;
MPI_Recv(&parentSize, sizeof(int), MPI_INT, 0, MSIZE, MPI_COMM_WORLD, &status); //Works fine
MPI_Recv(&parent, parentSize, MPI_BYTE, 0, MSEND, MPI_COMM_WORLD, &status); //Gives a segfault when I try to cout parent

我是否分配了不正确的内存量?我相信size()将返回字符串(28)中的字符数和null终止符+ 1 ?

您可以尝试MPI_Send(parent.c_str(), parent.size()....);并从另一端接收一个char buf[parentSize]