正在尝试MPI_发送和MPI_Recv char数组获取垃圾

正在尝试MPI_发送和MPI_Recv char数组获取垃圾,mpi,Mpi,我试图从每个处理器创建一个日志文件,然后将其作为字符数组发送到根目录。我首先发送长度,然后发送数据。长度发送正常,但数据总是垃圾!这是我的密码: MPI_Barrier (MPI_COMM_WORLD); string out = ""; MPI_Status status[2]; MPI_Request reqs[num_procs]; string log = "TEST"; int length = log.length(); char* temp = (char *) malloc(

我试图从每个处理器创建一个日志文件,然后将其作为字符数组发送到根目录。我首先发送长度,然后发送数据。长度发送正常,但数据总是垃圾!这是我的密码:

MPI_Barrier (MPI_COMM_WORLD);
string out = "";

MPI_Status status[2];
MPI_Request reqs[num_procs];

string log = "TEST";
int length = log.length();
char* temp = (char *) malloc(length+1);
strcpy(temp, log.c_str());

if (my_id != 0)
{
    MPI_Send (&length, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);
    MPI_Send (&temp, length+1, MPI_CHAR, 0, 1, MPI_COMM_WORLD);
}   
else {      
    int length;
    for (int i = 1; i < num_procs; i++)
    {
        MPI_Recv (&length, 2, MPI_INT, i, 1, MPI_COMM_WORLD, &status[0]);
        char* rec_buf;
        rec_buf = (char *) malloc(length+1);
        MPI_Recv (rec_buf, length+1, MPI_CHAR, i, 1, MPI_COMM_WORLD, &status[1]);
        out += rec_buf;
        free(rec_buf);
    }
}

MPI_Barrier (MPI_COMM_WORLD);
free(temp);
MPI\u屏障(MPI\u通信世界);
串出“”;
MPI_状态[2];
MPI_请求请求[num_procs];
字符串log=“TEST”;
int length=log.length();
char*temp=(char*)malloc(长度+1);
strcpy(temp,log.c_str());
如果(我的id!=0)
{
MPI_发送(&length,1,MPI_INT,0,1,MPI_COMM_WORLD);
MPI_发送(&temp,长度+1,MPI_字符,0,1,MPI_通信世界);
}   
否则{
整数长度;
for(int i=1;i
您正在将
字符**
传递给
MPI\u Send
而不是
char*
,这会导致内存损坏,或者在您的情况下,会导致输出出现乱码。如果你用的话,一切都会好的

MPI_Send (temp, length+1, MPI_CHAR, 0, 1, MPI_COMM_WORLD);

(注意第一个参数前面的已删除的
temp

您可以添加答案。你只需要等一段时间。如果您现在返回并添加您的答案,它将不会显示为未回答,您可以将其标记为您自己已回答(在另一个等待期后)。是的,请在下面添加您的答案为什么您要使用
MPI\u发送(&length,1,…)
发送一个单词,但收到两个单词
MPI\u Recv(&length,2,…)
,为什么你所有的邮件标签都是1?引用自:“发送和接收操作应与消息标记匹配。”