У меня действительно странная проблема на моей руке. Я читаю файл и запускаю фред, и вместо того, чтобы пропустить вперед 6 байтов, как это должно быть, он идет назад 4092-6 байтов!
Вот вызов:
int bread = sizeof(RoughnessReadPoint) * fread(&roughnessBuffer, sizeof(RoughnessReadPoint), 1, ptr);
Вот связанная структура:
struct RoughnessReadPoint
{
S8 x;
S8 y;
S8 z;
S8 x2;
S8 y2;
S8 z2;
};
Вот трассировка GDB, показывающая чтение:
216 int bread = sizeof(RoughnessReadPoint) * fread(&roughnessBuffer, sizeof(RoughnessReadPoint), 1, ptr);
(gdb) p ptr->_IO_read_ptr
$5 = 0x5555557cce42 "\002\017\374\016\002\373˱N\001\002\017\374\017\020\020"
(gdb) n
217 totalBytesRead += bread;
(gdb) p ptr->_IO_read_ptr
$6 = 0x5555557cce48 "˱N\001\002\017\374\017\020\020"
Как вы можете видеть, он скачет на 6, как и предполагалось.
Теперь проблемный участок:
216 int bread = sizeof(RoughnessReadPoint) * fread(&roughnessBuffer, sizeof(RoughnessReadPoint), 1, ptr);
(gdb) p ptr->_IO_read_ptr
$14 = 0x5555557cce4c "\002\017\374\017\020\020"
(gdb) n
217 totalBytesRead += bread;
(gdb) p ptr->_IO_read_ptr
$15 = 0x5555557cbe52 "\261N\001\002\017\374\017\002\374ͱN\001\002\017\373\017\002\374бN\001\002\017\374\017\002\373ұN\001\002\017\373\016\002\373ձN\001\002\017\373\016\002\373ױN\001\002\017\374\016\002\373ڱN\001\002\017\373\016\002\373ܱN\001\002\017\373\017\002\373߱N\001\002\017\373\017\002\373\342\261N\001\002\017\373\017\002\374\344\261N\001\002\017\373\017\002\373\347\261N\001\002\017\373\017\002\373\351\261N\001\002\017\373\017\002\373\354\261N\001\002\017\373\017\002\373\356\261N\001\002\017\374\016\002\373\361\261N\001\002\017\373\016\002\373\363\261N\001\002\017\374\016\002\373\366\261N\001\002\017\374\016\002\373\370\261N\001\002\017\374\016\002\373\373\261N\001\002\017\374\016\002\373", <incomplete sequence \375>...
Обратите внимание, указатель чтения ушел ОБРАТНО 4086 байт.
Для правильной меры я распечатал, сколько байтов было читайте также здесь ...
(gdb) p bread
$16 = 6
Кто-нибудь знает, что происходит?
Другая информация: Это, очевидно, отладочная сборка, но это происходит при компиляции с -O2 Это также Ubuntu 18.04, скомпилированный с g ++. Файл имеет длину около 130 МБ, и это происходит на 83 МБ в файле
Если я продолжаю читать, файл снова и снова приближается к одной и той же точке, только чтобы упасть назад 4086 байт каждый раз!