【发布时间】:2015-11-02 13:37:07
【问题描述】:
我正在尝试从 HDF5 文件中预加载一堆矩阵并将它们存储在一个动态数组中。但是,我无法让它像我希望的那样工作。 由于某种我无法弄清楚的原因,整个数组而不是子数组被覆盖。任何想法如何解决这个问题?
这是我的代码:
short ***data[line_count];
short** dset_data;
for (int file_index = 0; file_index < line_count; ++file_index){
dset_data = (short**) malloc(DIM_Y * sizeof(short*));
dset_data[0] = (short*) malloc(DIM_Y * DIM_X * sizeof(short));
for (int i=1; i < DIM_Y; i++)
dset_data[i] = dset_data[0] + i * DIM_X;
for (int y = 0; y < DIM_Y; y++) {
for (int x = 0; x < DIM_X; x++) {
dset_data[y][x] = 0;
}
}
/* Open an existing file. */
file_id = H5Fopen(input_files[file_index], H5F_ACC_RDONLY, H5P_DEFAULT);
/* Open an existing dataset. */
dataset_id = H5Dopen2(file_id, "data/data", H5P_DEFAULT);
/* Read dataset */
status = H5Dread(dataset_id, H5T_NATIVE_SHORT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &dset_data[0][0]);
/* Store two dimensional array at n-th position in data array */
data[file_index] = &dset_data;
/* Close the dataset. */
status = H5Dclose(dataset_id);
/* Close the file. */
status = H5Fclose(file_id);
}
【问题讨论】:
-
哇..一个三星级+阵列。恭喜你,你是winner
-
Three Star Programmer 不是一个褒义词。我不愿意花时间研究一系列三分球的目的——我的大脑被炸了。这几乎肯定是错误的。鉴于多个单独的内存分配,您无法在单个
read函数调用中读取所有内容。您可能可以使用类似于 POSIX 的readv()的函数来完成此操作,但需要做很多设置工作。 -
嗯...该代码实际上在哪里尝试使用声明为
short ***data[line_count]的data变量?你只是想在开始之前吓跑所有人吗? -
哦,好的;这就是为什么眼球不好而搜索更好的原因。您在
data[file_index]条目中记录了局部变量data_set的地址。这不好。你需要弄清楚发生了什么。我认为你应该从data中减去一颗星,并分配data[file_index] = dset_data;。并且没有太多其他需要改变的地方。您有一个 2D 数据集数组,而不是 3D 数据集数组。