diff --git a/src/KSPACE/fft3d.cpp b/src/KSPACE/fft3d.cpp index 9ee798b50d..357fdd5bf7 100644 --- a/src/KSPACE/fft3d.cpp +++ b/src/KSPACE/fft3d.cpp @@ -312,7 +312,10 @@ struct fft_plan_3d *fft_3d_create_plan( plan->pre_plan = remap_3d_create_plan(comm,in_ilo,in_ihi,in_jlo,in_jhi,in_klo,in_khi, first_ilo,first_ihi,first_jlo,first_jhi, first_klo,first_khi,2,0,0,FFT_PRECISION,0); - if (plan->pre_plan == nullptr) return nullptr; + if (plan->pre_plan == nullptr) { + free(plan); + return nullptr; + } } // 1d FFTs along fast axis diff --git a/src/KSPACE/remap.cpp b/src/KSPACE/remap.cpp index 57bde0beca..052cdd8095 100644 --- a/src/KSPACE/remap.cpp +++ b/src/KSPACE/remap.cpp @@ -125,8 +125,8 @@ void remap_3d(FFT_SCALAR *in, FFT_SCALAR *out, FFT_SCALAR *buf, for (int i=0;inrecv;i++) recvBufferSize += plan->recv_size[i]; - auto packedSendBuffer = (FFT_SCALAR *) malloc(sizeof(FFT_SCALAR) * sendBufferSize); - auto packedRecvBuffer = (FFT_SCALAR *) malloc(sizeof(FFT_SCALAR) * recvBufferSize); + auto packedSendBuffer = (FFT_SCALAR *) malloc(sizeof(FFT_SCALAR) * sendBufferSize + 1); + auto packedRecvBuffer = (FFT_SCALAR *) malloc(sizeof(FFT_SCALAR) * recvBufferSize + 1); int *sendcnts = (int *) malloc(sizeof(int) * plan->commringlen); int *rcvcnts = (int *) malloc(sizeof(int) * plan->commringlen); @@ -282,10 +282,16 @@ struct remap_plan_3d *remap_3d_create_plan( // combine output extents across all procs inarray = (struct extent_3d *) malloc(nprocs*sizeof(struct extent_3d)); - if (inarray == nullptr) return nullptr; + if (inarray == nullptr) { + free(plan); + return nullptr; + } outarray = (struct extent_3d *) malloc(nprocs*sizeof(struct extent_3d)); - if (outarray == nullptr) return nullptr; + if (outarray == nullptr) { + free(plan); + return nullptr; + } MPI_Allgather(&out,sizeof(struct extent_3d),MPI_BYTE, outarray,sizeof(struct extent_3d),MPI_BYTE,comm); @@ -546,7 +552,7 @@ struct remap_plan_3d *remap_3d_create_plan( // resize commringlist to final size - commringlist = (int *) realloc(commringlist, commringlen*sizeof(int)); + commringlist = (int *) realloc(commringlist, commringlen*sizeof(int) + 1); // set the plan->commringlist