У меня есть код, который сохраняет двумерный массив с плавающей точкой в двоичный файл, и другой код, который считывает двоичный файл и помещает его в двумерный массив с плавающей точкой.
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).Я вызываю функцию чтения следующим образом (я пропустил код unrelevent):
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);
Я проверил, что len_1D
и len_2D
в write2DArrrayToBinary
и read2DArrayFromBinary
одинаковы.Кроме того, я использовал gdb, и функция read segfaults на первой итерации.
Как вы думаете, что это вызвало холод?