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これはデータセットを含むグループで、 memspacevxはメモリ内のハイパースラブ、vx_ptr はメモリ内のデータです。このアプローチはうまく機能しますが、後で別のデータ型を使用する必要があるため、データセットから型を直接読み取りたいと考えています。

hid_t datatype;
datatype = H5Dget_type(dataset);
status = H5Dread(dataset, datatype, memspace,H5S_ALL,
                          H5P_DEFAULT, vx_ptr);

残念ながら、このアプローチは関数で segfault を引き起こします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 に答える