2

我在这里阅读了很多页面并发布了以前的类似问题但无济于事,我似乎无法找到可行的解决方案。

这是一个 uni assignment,提供的代码开始时很糟糕,但我们必须使用它:/我不是要求解决整个问题,只是 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) 和 + 1 作为空终止符?

4

1 回答 1

3

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

于 2013-05-04T02:33:04.833 回答