From 53d7ac0f2b26ca7cc59b5a50466f228b9fc0dbe1 Mon Sep 17 00:00:00 2001 From: Qianqian Fang Date: Wed, 7 Jul 2021 23:01:37 -0400 Subject: [PATCH] fix shared mem misalignment error, close #118 --- src/mcx_utils.c | 9 ++++++--- src/mcxlab.cpp | 4 +++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/mcx_utils.c b/src/mcx_utils.c index d09e0938..34d3c715 100644 --- a/src/mcx_utils.c +++ b/src/mcx_utils.c @@ -1696,19 +1696,22 @@ int mcx_loadjson(cJSON *root, Config *cfg){ val=FIND_JSON_OBJ("InverseCDF","Domain.InverseCDF",Domain); if(val){ - cfg->nphase=cJSON_GetArraySize(val)+2; /*left-/right-ends are excluded, so added 2*/ + int nphase=cJSON_GetArraySize(val); + cfg->nphase=nphase+2; /*left-/right-ends are excluded, so added 2*/ + cfg->nphase+=(cfg->nphase & 0x1); /* make cfg.nphase even number */ if(cfg->invcdf) free(cfg->invcdf); cfg->invcdf=(float*)calloc(cfg->nphase,sizeof(float)); cfg->invcdf[0]=-1.f; /*left end is always -1.f,right-end is always 1.f*/ vv=val->child; - for(i=1;inphase-1;i++){ + for(i=1;i<=nphase;i++){ cfg->invcdf[i]=vv->valuedouble; vv=vv->next; if(cfg->invcdf[i]invcdf[i-1] || (cfg->invcdf[i]>1.f || cfg->invcdf[i]<-1.f)) MCX_ERROR(-1,"Domain.InverseCDF contains invalid data; it must be a monotonically increasing vector with all values between -1 and 1"); } - cfg->invcdf[cfg->nphase-1]=1.f; /*left end is always -1.f,right-end is always 1.f*/ + cfg->invcdf[nphase+1]=1.f; /*left end is always -1.f,right-end is always 1.f*/ + cfg->invcdf[cfg->nphase-1]=1.f; } val=FIND_JSON_OBJ("VoxelSize","Domain.VoxelSize",Domain); diff --git a/src/mcxlab.cpp b/src/mcxlab.cpp index 8a5ee9d6..5d144088 100644 --- a/src/mcxlab.cpp +++ b/src/mcxlab.cpp @@ -721,6 +721,7 @@ void mcx_set_field(const mxArray *root,const mxArray *item,int idx, Config *cfg) double *val=mxGetPr(item); if(cfg->invcdf) free(cfg->invcdf); cfg->nphase=(unsigned int)nphase+2; + cfg->nphase+=(cfg->nphase & 0x1); // make cfg.nphase even number cfg->invcdf=(float*)calloc(cfg->nphase,sizeof(float)); for(i=0;iinvcdf[i+1]=val[i]; @@ -729,7 +730,8 @@ void mcx_set_field(const mxArray *root,const mxArray *item,int idx, Config *cfg) } cfg->invcdf[0]=-1.f; cfg->invcdf[nphase+1]=1.f; - printf("mcx.invcdf=[%ld];\n",nphase); + cfg->invcdf[cfg->nphase-1]=1.f; + printf("mcx.invcdf=[%ld];\n",cfg->nphase); }else if(strcmp(name,"shapes")==0){ int len=mxGetNumberOfElements(item); if(!mxIsChar(item) || len==0)