我目前尝试从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是内存中的hyperslab,vx_ptr是内存中的数据。这种方法很好,但是因为我想稍后使用不同的数据类型,我想直接从数据集中读取类型:
hid_t datatype;
datatype = H5Dget_type(dataset);
status = H5Dread(dataset, datatype, memspace,H5S_ALL,
H5P_DEFAULT, vx_ptr);
不幸的是,这种方法会导致函数H5Dread
出现段错误。
也许我错过了什么?谢谢你的任何建议。
0x00007ffff5adbd1e in __memcpy_ssse3_back () from /lib64/libc.so.6
。
答案 0 :(得分:1)
您可以使用H5Dget_type(dataset)
检查从H5Tequal(datatype, H5T_<type>)
返回的数据类型是否符合预期。它应该与用于写入数据集的数据类型以及等效类型vx_ptr
相匹配(这可能是实际导致段错误的原因)。
此外,datatype
需要使用H5Tclose(datatype)
关闭。