我目前尝试从C的hdf5数据集中读取一些数据,如下所示。
dataset = H5Dopen(ic_group, 'vx', H5P_DEFAULT);
status = H5Dread(dataset, H5T_NATIVE_FLOAT, memspace,H5S_ALL,
H5P_DEFAULT, vx_ptr);
status = H5Dclose(dataset);
这ic_group
是一个包含数据集的组vx
,memspace是内存中的超级板,vx_ptr是内存中的数据。这种方法很好用,但是由于以后我想使用不同的数据类型,所以我想直接从数据集中读取类型:
hid_t datatype;
datatype = H5Dget_type(dataset);
status = H5Dread(dataset, datatype, memspace,H5S_ALL,
H5P_DEFAULT, vx_ptr);
不幸的是,这种方法导致函数出现段错误H5Dread
。也许我缺少什么?感谢您的任何建议。
编辑:我不知道这是否有用,但gdb的回溯到0x00007ffff5adbd1e in __memcpy_ssse3_back () from /lib64/libc.so.6
。
您可以使用来检查返回的数据类型H5Dget_type(dataset)
是否符合您的期望H5Tequal(datatype, H5T_<type>)
。它应该匹配用于写入数据集的数据类型,也应该匹配它的等效类型vx_ptr
(这可能实际上是造成段错误的原因)。
另外,datatype
还需要用关闭H5Tclose(datatype)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句