Hi,
        Your alloc_f_2dim() routine is allocating a nested 2-D array of 
pointers-to-arrays, instead of a contiguous 2-D array of shorts.  It's likely 
that changing that will address your problem.

        Quincey

On Sep 13, 2010, at 12:05 PM, Simonpro wrote:

> 
> Hi all,
> I've just started using the HDF5 C interface and I've been having a few
> problems. I'm sure it's some simple thing that I've overlooked, but it'd be
> great if you guys could help find what I've done wrong!!
> 
> I can read data with no problems, but when I want to write my results to an
> HDF5 file things go wrong. I'm trying to write a 2000x2200 array, but the
> lines being output to the H5 file are not what I expect.
> I have created an example that is supposed to write the line number to each
> column in an H5 file (datatype: H5T_NATIVE_USHORT) but rather than the
> expected results I get something like this:
> 0     0       0       0       0       0       0           .....
> 0     0       4009    0       1       1       1           .....
> 1     1       1       1       0       0       4009      .....
> 2     2       2       2       2       2       2           .....
> 3     3       3       3       3       3       3           .....
> 
> The '4009' moves 4 columns to the right with each line.
> 
> Any ideas what the problem could be? The same issue exists (with different
> numbers, of course) when I try with a floating point data type.
> 
> I've included the sample code I used to generate the data below. Originally
> there was lots of error checking (based on the status returned from the HDF
> commands) for each step of the HDF process, but for brevity I remove those
> checks as they showed no problems:
> 
> 
> 
> #include <stdlib.h>
> #include <hdf5.h>
> 
> int Save_f_Data(hid_t,char *,short unsigned int **,int,int);
> void alloc_f_2dim (short unsigned int ***,int,int);
> 
> int main()
> {
>       char *name="TESTARR";
>       int xsize=2200;
>       int ysize=2000; 
>       int retval;     
>       hid_t outfile;
>       herr_t  status;
>               
> 
> outfile=H5Fcreate("/home/simon/Desktop/TEST/outtest.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
>       short unsigned int **testarr;
>       int i,j;        
>       
>       alloc_f_2dim (&testarr,xsize,ysize);
>       for (i=0;i<xsize;i++)   for (j=0;j<ysize;j++) testarr[i][j]=i;
>       
>       retval=Save_f_Data(outfile,name,testarr,xsize,ysize);
>       status=H5Fclose(outfile);
> 
>       printf("Running!\n");
>       return 0;
> }
> 
> int Save_f_Data(hid_t outfile,char *setname,short unsigned int **
> procarr,int xsize, int ysize)
> {
> 
>       herr_t  status;
>       hid_t   dataspace,dataset,datatype;
>       hsize_t dims[2]={xsize,ysize};
>       
>       dataspace=H5Screate_simple(2,dims,dims);
>       
> dataset=H5Dcreate(outfile,setname,H5T_NATIVE_USHORT,dataspace,H5P_DEFAULT);
> 
> 
> status=H5Dwrite(dataset,H5T_NATIVE_USHORT,H5S_ALL,H5S_ALL,H5P_DEFAULT,procarr[0]);
>     
>       status=H5Sclose(dataspace);
>       status=H5Dclose(dataset);
>       return 0;
> } 
> 
> void alloc_f_2dim (short unsigned int ***ptr,int nrh,int nch)
> {
>   int i = 0;
>   short unsigned int **p = NULL;
> 
>   p = (short unsigned int **) calloc ((nrh + 1), sizeof (short unsigned int
> *));
>   if (!p) {
>      fprintf(stderr,"allocation failure dim0 in alloc_d_2dim()");
>                  
>   }
>   for (i = 0; i <= nrh; i++) {
>      p[i] = (short unsigned int *) calloc ((nch + 1), sizeof (short
> unsigned int));
>      if (!p[i]) {
>        fprintf(stderr,"allocation dim1 in alloc_d_2dim()");
>                     
>      }
>   }
>   *ptr = p;
>   return;
> }
> -- 
> View this message in context: 
> http://hdf-forum.184993.n3.nabble.com/Problem-writing-array-to-an-HDF5-file-tp1464609p1464609.html
> Sent from the hdf-forum mailing list archive at Nabble.com.
> 
> _______________________________________________
> Hdf-forum is for HDF software users discussion.
> [email protected]
> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org


_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org

Reply via email to