【发布时间】:2019-03-12 18:40:12
【问题描述】:
我有将二维浮点数组保存到二进制文件中的代码,以及另一个读取二进制文件并将其放入二维浮点数组的代码。
void write2DArrayToBinary(const char* file_name, void** array, size_t len_1D, size_t len_2D, size_t num_bytes_per_elem) {
FILE* file = fopen(file_name, "wb");
for (size_t i = 0; i < len_1D; i++) {
fwrite(array[i], num_bytes_per_elem, len_2D, file);
}
fclose(file);
}
void read2DArrayFromBinary(void** array, size_t len_1d, size_t len_2d, size_t num_bytes_per_elem, const char* file_name) {
FILE* file = fopen(file_name, "rb");
for (size_t i = 0; i < len_1d; i++) {
array[i] = malloc(num_bytes_per_elem * len_2d);
fread(array[i], num_bytes_per_elem, len_2d, file);
}
fclose(file);
}
前者在 .C 文件中,后者在 .CC (c++11) 中。 我这样调用读取函数(我省略了不相关的代码):
this->dilate_weights_prev = (float**)malloc(sizeof(float*) * this->num_layers);
read2DArrayFromBinary((void**)this->dilate_weights_prev, this->num_layers, this->dilate_weights_prev_len, sizeof(float), fileName);
我检查了write2DArrrayToBinary 和read2DArrayFromBinary 中的len_1D 和len_2D 是否相同。另外,我使用了 gdb,并且 read 函数在第一次迭代时会出现段错误。
您认为寒冷是什么原因造成的?
【问题讨论】:
-
@DYZ 我已编辑以进行澄清。 write 函数在 C 中调用,read 函数在 C++ 中调用。
-
只是好奇,为什么将数组转换为
void**,而它显然是float**? -
@DYZ 只是为了保持通用性(我也将它用于 int 数组)。
-
您是否检查过
file是否不为NULL? (您必须。)您是否检查过array[i]是否不为NULL? (必须。)fopen和malloc都可能失败。 -
@DYZ 原来 fopen 返回 NULL!谢谢!