C++ 64 位文件 i/o 陷阱

标签 c++ linux 32bit-64bit

在将 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/

相关文章:

c++ - 没有 Windows API 调用的 Windows 当前 ThreadID

linux - linux中虚拟内存存在于何处?

linux - 32 位 Linux 程序的整个运行时库树是否需要是 32 位的?

visual-studio - 64 位版本的 Visual Studio 2015?

linux - 系统调用 : difference between sys_exit(), SYS_exit 和 exit()

visual-studio-2010 - 32/64 位的 MSBuild 和 $(ProgramFiles) 问题

c++ - 通过placement-new手动构造一个平凡的基类

c++ - (c++) 无法迭代键哈希函数中的 vector

c++ - 在 C/C++ 中使用 % (模数)有什么替代方法吗?

linux - 在 shell 脚本中的捕获组中转义引号