C ++ 64-битный файл ввода / вывода получил - PullRequest
2 голосов
/ 04 марта 2011

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

1 Ответ

5 голосов
/ 04 марта 2011

Это звучит как неопределенное поведение для меня. 64-битный или 32-битный аспект вашего вопроса - красная сельдь. При таких обстоятельствах компилятор может стереть ваш домашний каталог или подать налоговую декларацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...