在将 C++ 应用程序从 32 位 Linux 转换为 64 位 Linux 时,我发现了一个有趣的错误。 我们的 FileStore 类实现了向文件保存结构或从文件恢复结构。 除了一个方法之外,它总是在每个操作之前和之后调用 fopen() 和 fclose()。 在 32 位平台上的这个(有缺陷的)方法中,即使该文件之前已被其他方法 fclose() 过,它也可以毫无错误地执行 fseek() 和 fread() 操作。在 64 位平台上,每次调用 fread() 都会崩溃。 我猜想在 32 位平台上,即使在 fclose() 之后,底层 FILE 结构仍然存在,因此仍然可以访问它。 有谁知道为什么会出现这种差异以及与 64 位文件 I/O 有关的任何其他问题吗?
最佳答案
对我来说这听起来像是未定义的行为。您的问题的 64 位与 32 位方面是一个转移注意力的话题。编译器可以随意删除您的主目录,或者在这种情况下提交您的联邦纳税申报表。
关于C++ 64 位文件 i/o 陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188470/