- sendtmpbuf = static_cast<void*>(xbt_malloc(maxsize));
- memcpy(sendtmpbuf, recvbuf, maxsize);
- sendtmpcounts = static_cast<int*>(xbt_malloc(size * sizeof(int)));
- memcpy(sendtmpcounts, recvcounts, size * sizeof(int));
- sendtmpdisps = static_cast<int*>(xbt_malloc(size * sizeof(int)));
- memcpy(sendtmpdisps, recvdisps, size * sizeof(int));
- sendtmptypes = static_cast<MPI_Datatype*>(xbt_malloc(size * sizeof(MPI_Datatype)));
- memcpy(sendtmptypes, recvtypes, size * sizeof(MPI_Datatype));
+ tmp_sendbuf.reset(new unsigned char[maxsize]);
+ real_sendbuf = memcpy(tmp_sendbuf.get(), recvbuf, maxsize);
+ tmp_sendcounts.reset(new int[size]);
+ std::copy(recvcounts, recvcounts + size, tmp_sendcounts.get());
+ real_sendcounts = tmp_sendcounts.get();
+ tmp_senddisps.reset(new int[size]);
+ std::copy(recvdisps, recvdisps + size, tmp_senddisps.get());
+ real_senddisps = tmp_senddisps.get();
+ tmp_sendtypes.reset(new MPI_Datatype[size]);
+ std::copy(recvtypes, recvtypes + size, tmp_sendtypes.get());
+ real_sendtypes = tmp_sendtypes.get();