我定义了自定义结构,并尝试进行简单的发送/恢复 .

这是我的结构:

enum RequestType {INSERT, UPDATE};
struct Request{
    RequestType requestType;
    char node1[MAX_CHAR];
    char node2[MAX_CHAR];
    char value[MAX_CHAR];
}

然后将其应用于MPI:

Request req;
MPI_Datatype reqTypeMPI;
MPI_Datatype reqType[4] = { MPI_INTEGER, MPI_CHAR, MPI_CHAR, MPI_CHAR };
int blocklen[4] = { 1, MAX_CHAR, MAX_CHAR, MAX_CHAR };
MPI_Aint disp[4];
MPI_Get_address(&req.requestType, &disp[0]);
MPI_Get_address(&req.node1, &disp[1]);
MPI_Get_address(&req.node2, &disp[2]);
MPI_Get_address(&req.value, &disp[3]);
disp[3] = disp[3] - disp[2];
disp[2] = disp[2] - disp[1];
disp[1] = disp[1] - disp[0];
disp[0] = 0;

MPI_Type_create_struct(4, blocklen, disp, reqType, &reqTypeMPI);
MPI_Type_commit(&reqTypeMPI);

当我尝试发送/接收时

// send
Request request;
strcpy_s(request.node1, node1.c_str());
strcpy_s(request.node2, node2.c_str());
strcpy_s(request.value, value.c_str());
request.requestType = INSERT;

MPI_Send(&request, 1, requestDatatype, 1, 1, MPI_COMM_WORLD);

// recv
Request request;
MPI_Status status;
MPI_Recv(&request, 1, requestDatatype, 0, MPI_ANY_TAG, MPI_COMM_WORLD, 
&status);

除"value"外,所有数据都正确传递 . 例如,令node1 = "node",node2 = "node2",value = "value",requestType = INSERT . 然后我明白了:

我究竟做错了什么?