@@ -105,8 +105,10 @@ dup_NC_var(const NC_var *rvarp)
105105 /* copy the contents of shape may not be necessary, as one must call
106106 * compute_var_shape() to recompute it after a new variable is created
107107 */
108- memcpy (varp -> shape , rvarp -> shape , (size_t )rvarp -> ndims * SIZEOF_MPI_OFFSET );
109- memcpy (varp -> dsizes , rvarp -> dsizes , (size_t )rvarp -> ndims * SIZEOF_MPI_OFFSET );
108+ if (rvarp -> ndims > 0 ) { /* skip memcpy if ndims == 0 (scalar variables) */
109+ memcpy (varp -> shape , rvarp -> shape , (size_t )rvarp -> ndims * SIZEOF_MPI_OFFSET );
110+ memcpy (varp -> dsizes , rvarp -> dsizes , (size_t )rvarp -> ndims * SIZEOF_MPI_OFFSET );
111+ }
110112 varp -> xsz = rvarp -> xsz ;
111113 varp -> len = rvarp -> len ;
112114 varp -> begin = rvarp -> begin ;
@@ -507,13 +509,14 @@ ncmpio_inq_var(void *ncdp,
507509#endif
508510 * ndimsp = varp -> ndims ;
509511 }
510- if (dimids != NULL ) {
512+ if (dimids != NULL ) { /* copy dim IDs for non-scalar */
511513#ifdef ENABLE_SUBFILING
512514 /* varp->dimids_org is already set during open or enddef */
513- if (varp -> num_subfiles > 1 )
515+ if (varp -> num_subfiles > 1 && varp -> ndims_org > 0 )
514516 memcpy (dimids , varp -> dimids_org , (size_t )varp -> ndims_org * SIZEOF_INT );
515517 else
516518#endif
519+ if (varp -> ndims > 0 )
517520 memcpy (dimids , varp -> dimids , (size_t )varp -> ndims * SIZEOF_INT );
518521 }
519522 if (nattsp != NULL ) * nattsp = varp -> attrs .ndefined ;
0 commit comments