Непонятно, что такое buffer
(вероятно, это будет переменная внутри реализации стандартной библиотеки), но в коде вопроса есть по крайней мере одна явная ошибка:
unsigned char temp = 0;
...
ifile.read((char*)temp, sizeof(unsigned char));
Здесь высначала инициализируйте temp
нулем, затем преобразуйте его в указатель, который фактически является нулевым указателем. Вызов .read()
с нулевым указателем - UB - в месте (char*)temp (= nullptr)
.
нет действительного буфера памяти, вероятно, это:
char temp;
...
ifile.read(&temp, sizeof(char));
Здесь вы передаетедействительный адрес temp
в .read()
.
Также обратите внимание, что получение размера файла из tellg()
может дать неверный результат. См этот вопрос .