Проблема в том, что вы написали
fread(&ptr, BLOCK_SIZE, 1, fileptr);
где вы намеревались:
fread(ptr, BLOCK_SIZE, 1, fileptr);
Причина, по которой это проблема, заключается в том, что ptr
подается на get__data_block_from_disk
как char *
. Поэтому я предполагаю, что ptr
указывает на память, предназначенную для получения результата. (Я надеюсь, что вы указали на достаточно памяти, но вы не предоставили список вызывающего кода для этого случая.)
Учитывая, что ptr
уже является указателем на память, в которую вы хотите прочитать данные файла, это тот указатель, который вы предоставляете для fread
. Предоставляя адрес ptr
, записывая &ptr
, вы советуете fread()
перезаписать память, в которой хранится ptr
и любые смежные переменные. Без сомнения, это не то, что вы хотели.
Если вы допустили ошибку при компиляции кода C с помощью компилятора C ++, остановитесь. Но если это так, имейте в виду, что компилятор C ++ будет жаловаться на отсутствие reinterpret_cast<>
приведения ptr
с char *
до void *
.