我想将STL容器中包含的数据写入HDF5文件。根据我的收集,我需要声明一个连续的内存块,并使用"hdf5.h"
C API将数据从内存缓冲区传输到磁盘。
对于常规数据空间,该过程很简单;只需使用即可在堆栈上创建临时数组new
。HDF5“了解”这样的内存布局。当处理不规则数据空间时,情况就不同了,因为hvl_t
必须使用专用类型。
以下代码段有效,但不是ISO C ++(11):
// Test data
std::vector< std::vector<int> > jagged_array(3);
jagged_array[0] = {0};
jagged_array[1] = {0, 1, 2, 3};
jagged_array[2] = {0, 1, 2};
hvl_t X[jagged_array.size()];
for (unsigned int i = 0; i < jagged_array.size(); ++i) {
X[i].len = jagged_array[i].size();
int * ptr = (int *) malloc (X[i].len * sizeof(int));
for (unsigned int j = 0; j < X[i].len; ++j) {
ptr[j] = jagged_array[i][j];
}
X[i].p = (void *) ptr;
}
我的C非常生锈。除了非法行之外,此代码段几乎全部从HDF5示例页面中删除hvl_t X[jagged_array.size()];
。
我应该如何声明一个hvl_t
在运行时确定大小的?它肯定涉及malloc
,但是我真的很困惑。
@Lashane在评论中回答:
一个人应该简单地使用
hvl_t * X = (hvl_t *)malloc(jagged_array.size() * sizeof(hvl_t))