尝试MPI_Send和MPI_Recv char数组获取垃圾

use*_*583 6 mpi

我正在尝试从每个处理器创建一个日志文件,然后将其作为char数组发送到根目录.我先发送长度,然后发送数据.长度发送很好,但数据总是垃圾!这是我的代码:

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);
Run Code Online (Sandbox Code Playgroud)

nik*_*sfi 5

您传递的是char**toMPI_Send而不是 a char*,这会导致内存损坏,或者在您的情况下会得到乱码输出。如果你使用一切都应该没问题

MPI_Send (temp, length+1, MPI_CHAR, 0, 1, MPI_COMM_WORLD);
Run Code Online (Sandbox Code Playgroud)

(请注意删除&第一个参数前面的temp。)