C++ 二进制文件读写错误

C++ 二进制文件读写异常
这个问题困扰了我整个下午了.....不知道哪里发生了错误!!

C++ 二进制文件读写错误
C++ 二进制文件读写错误
C++ 二进制文件读写错误
C++ 二进制文件读写错误

异常信息:
FoodSystem.exe 中的 0x5500ad4a (msvcp100d.dll) 处最可能的异常: 0xC0000005: 读取位置 0x005685c4 时发生访问冲突
FoodSystem.exe 中的 0x5500ad4a (msvcp100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x005685c4 时发生访问冲突

在此先感谢大家的帮忙....谢谢!!


------解决方案--------------------
string是对象,不是一段内存,不能简单地将其内存保存到文件或从文件中读到内存。
搜“序列化与反序列化”
------解决方案--------------------
引用:
Quote: 引用:

C++ 二进制文件读写错误又是初学者爱犯的毛病,只有POD类型可以安全地写到文件再读回来。string不是POD类型,不能直接写进文件,具体原因是string是个复杂的类,内部可能有指针成员,指向new出来的堆对象,但因为它会在析构函数里自己delete,所以不会有内存泄漏,使用时也完全感觉不到它使用了堆,但一旦你序列化,也就是写到文件里,那个指针也被写到文件里的。如果你再搞一个string对象读取出来,那么同一时间,就会有两个string对象持有同一个指向相同堆内存地址的指针,然后他们肯定都会析构,于是那个指针必定被delete两次,必定发生异常。
既然LZ声称能为这个问题想一下午,并且我也指出了发生问题的原因,我相信LZ可能都用不着一晚上,就能自己解决了


谢谢我明白了~~用char数组可以成功读写!!但char数组要固定长度....难度没办法用string吗??

那你大可以不改类的结构,而修改序列化(读写文件)的操作。写文件时直接写入string内部的字符串,当然要记得把字符串长度也写进去,一般的格式是固定长度的数据代表字符串长度,后面跟着此长度的字符串,这样不就支持不定长字符串的序列化了,当然读的操作也要做对应修改。