使用fstream的“访问冲突”

用户名
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
int main()
{
char r;
fstream file1("text.txt", ios::in |ios::binary);
fstream file2("text.txt", ios::out | ios::binary);
r='r';
for(int i=0; i<100; i++)
    file2.write((char*)r, sizeof(char));
while(!file1.eof()) 
{
    file1.read((char*)r, sizeof(char));
    cout<<r<<"\n";
}
file1.close();
file2.close();
getch();
}

当我在vc ++ 2010中运行此程序时,在运行时出现以下错误:

Unhandled exception at 0x55361f68 (msvcp100d.dll) in file io.exe: 0xC0000005: Access       violation reading location 0x00000072.

是什么原因导致此错误?这是在阅读该行时发生的:

file2.write((char *)r,sizeof(char));

我有没有犯错?如果是,请为我指出(提前感谢)。

更新:我仍然没有得到我的预期输出(将(char *)r校正为(char *)&r之后。我得到的输出是:r。我不应该期望从'r'开始显示100个字符吗?如果没有,请提前告诉我原因并谢谢。

0x499602D2

除了其他答案,您的代码还存在另一个问题。

流默认情况下执行缓冲的I / O;写入时file1,您写入的内容可能尚未输出到实际文件中。内容实际上存储在临时缓冲区中以提高效率。写入实际文件是为显式保留的操作flush(),在close()调用时,或者文件流超出范围并被破坏时。

代码中的问题是,在直接写入文件流之后,您将执行输入而不确定输出数据是否已写入实际文件。如果您假设已成功将数据从输入文件读取到变量,则可能导致未定义行为。

相互依赖的文件流应该同步。即,当文件流试图从您已写入的同一文件读取时,则必须刷新输出文件流。可以通过将流“绑定”在一起来实现此目的,这可以使用tie()

file1.tie(&file2);

file1执行输入时,file2将被刷新,强制将其缓冲区中的数据写入文件。

您遇到的另一个问题是,您没有检查文件流的构造是否正确,或者是否已从中成功读取文件流file1您可以使用if()语句来执行此操作:

std::fstream file1("text.txt", std::ios_base::in  | std::ios_base::binary);
std::fstream file2("text.txt", std::ios_base::out | std::ios_base::binary);
char r('r');

if (file1 && file2)
{
    file1.tie(&file2);

    for (int i = 0; i < 100; ++i)
        file2.write(&r, sizeof(char));

    while (file1.read(&r, sizeof(char))) {
        std::cout << r << std::endl;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用fstream的“访问冲突”

来自分类Dev

使用fstream访问linux用户主目录

来自分类Dev

使用 mmap 与 fstream 或 fopen 访问二进制文件

来自分类Dev

Inno Setup:使用IShellLink GetWorkingDirectory的访问冲突

来自分类Dev

使用openSceneGraph访问冲突写入位置

来自分类Dev

使用ARB_DEBUG_OUTPUT的访问冲突

来自分类Dev

使用指针引发访问冲突的memcpy

来自分类Dev

使用Xlib的XCreateSimpleWindow时发生访问冲突

来自分类Dev

使用MSVC的模块中的访问冲突

来自分类Dev

使用对象指针时的访问冲突读取

来自分类Dev

使用GetFileVersionInfo获取访问冲突错误

来自分类Dev

使用Cudd的访问冲突读取位置

来自分类Dev

使用ARB_DEBUG_OUTPUT的访问冲突

来自分类Dev

使用openSceneGraph访问冲突写入位置

来自分类Dev

使用 ZKteco SDK 编写 Python 访问冲突

来自分类Dev

使用 fstream 读取 csv,仅使用 fstream

来自分类Dev

为什么以下使用IOmniThreadPool的代码会导致访问冲突?

来自分类Dev

使用迭代器时如何解决“访问冲突”?

来自分类Dev

使用printf打印浮点值时发生访问冲突

来自分类Dev

尝试通过共享指针使用变量时读取访问冲突

来自分类Dev

由于写访问冲突,在openv中使用SURF失败

来自分类Dev

在函数内部使用malloc()之后“写入访问冲突”

来自分类Dev

使用ctypes回调功能时的访问冲突

来自分类Dev

使用IFMXImageManagerService时在iOS上发生访问冲突

来自分类Dev

GL_ARB_clear_texture的使用引发访问冲突异常

来自分类Dev

使用Outlook通讯簿时访问冲突异常

来自分类Dev

使用带有属性BlobEdit的TcxGridColumn时的访问冲突

来自分类Dev

为什么以下使用IOmniThreadPool的代码会导致访问冲突?

来自分类Dev

为什么在使用ReadFile()函数时出现访问冲突?

Related 相关文章

  1. 1

    使用fstream的“访问冲突”

  2. 2

    使用fstream访问linux用户主目录

  3. 3

    使用 mmap 与 fstream 或 fopen 访问二进制文件

  4. 4

    Inno Setup:使用IShellLink GetWorkingDirectory的访问冲突

  5. 5

    使用openSceneGraph访问冲突写入位置

  6. 6

    使用ARB_DEBUG_OUTPUT的访问冲突

  7. 7

    使用指针引发访问冲突的memcpy

  8. 8

    使用Xlib的XCreateSimpleWindow时发生访问冲突

  9. 9

    使用MSVC的模块中的访问冲突

  10. 10

    使用对象指针时的访问冲突读取

  11. 11

    使用GetFileVersionInfo获取访问冲突错误

  12. 12

    使用Cudd的访问冲突读取位置

  13. 13

    使用ARB_DEBUG_OUTPUT的访问冲突

  14. 14

    使用openSceneGraph访问冲突写入位置

  15. 15

    使用 ZKteco SDK 编写 Python 访问冲突

  16. 16

    使用 fstream 读取 csv,仅使用 fstream

  17. 17

    为什么以下使用IOmniThreadPool的代码会导致访问冲突?

  18. 18

    使用迭代器时如何解决“访问冲突”?

  19. 19

    使用printf打印浮点值时发生访问冲突

  20. 20

    尝试通过共享指针使用变量时读取访问冲突

  21. 21

    由于写访问冲突,在openv中使用SURF失败

  22. 22

    在函数内部使用malloc()之后“写入访问冲突”

  23. 23

    使用ctypes回调功能时的访问冲突

  24. 24

    使用IFMXImageManagerService时在iOS上发生访问冲突

  25. 25

    GL_ARB_clear_texture的使用引发访问冲突异常

  26. 26

    使用Outlook通讯簿时访问冲突异常

  27. 27

    使用带有属性BlobEdit的TcxGridColumn时的访问冲突

  28. 28

    为什么以下使用IOmniThreadPool的代码会导致访问冲突?

  29. 29

    为什么在使用ReadFile()函数时出现访问冲突?

热门标签

归档