Я обнаружил интересную ошибку при преобразовании приложения C ++ из 32-разрядной версии Linux.
Наш класс FileStore реализует сохранение / восстановление структур в / из файла.
Он всегда вызывает fopen () и fclose () до и после каждой операции, кроме одного метода.
В этом (ошибочном) методе на 32-битных платформах он может без ошибок выполнять fseek () и fread (), даже если файл был ранее fclose () 'd другими методами. На 64-битной платформе он каждый раз падает на fread ().
Я предполагаю, что на 32-битной платформе базовая структура FILE сохраняется даже после fclose (), поэтому к ней все еще можно получить доступ.
У кого-нибудь есть какая-либо дополнительная информация о том, почему это различие и любые другие ошибки связаны с вводом / выводом 64-битного файла?