2

我目前尝试从 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。也许我错过了什么?感谢您的任何建议。

编辑:我不知道这是否有用,但 gdb 的回溯下降到 0x00007ffff5adbd1e in __memcpy_ssse3_back () from /lib64/libc.so.6.

4

1 回答 1

1

您可以H5Dget_type(dataset)使用H5Tequal(datatype, H5T_<type>). 它应该匹配用于写入数据集的数据类型和等效类型vx_ptr(这可能是实际导致段错误的原因)。

此外,datatype需要用H5Tclose(datatype).

于 2014-07-23T11:16:48.773 回答