-iostream- 2018-03-22 11:41 采纳率: 100%
浏览 4646
已采纳

C++中使用二进制文件保存和读取结构体的问题

为了了解书中的代码,自己编写了下面这段简单的测试代码。
#include
#include
#include

struct Test
{
    int key;
    std::string data;
};

int main()
{
    Test test;
    test.key = 1;
    test.data = "Anthony";
    std::ofstream fout("D:\\Data.dat", std::ios_base::out | std::ios_base::binary);
    fout.write((char*)&test, sizeof Test);
    fout.close();
    std::ifstream fin("D:\\Data.dat", std::ios_base::in | std::ios_base::app | std::ios_base::binary);
    Test test_1;
    fin.seekg(0);
    fin.read((char*)&test_1, sizeof Test);
    std::cout << test_1.key << std::endl;
    std::cout << test_1.key << std::endl;
    std::cout << test_1.data << std::endl;
  std::cout << test_1.data << std::endl;

    system("pause");
    return 0;
}

这段代码编译没有任何问题,但是出现了运行错误(CE)。而且经调试发现错误实在程序执行return 0;之后才发生的。程序运行截图如下。
运行代码后如下:
运行代码后
再按任意键后如下:
按任意键后

调试后发现的异常为:0x00088538 处(位于 FileStruct.exe 中)引发的异常: 0xC0000005: 写入位置 0xDDDDDDDD 时发生访问冲突。****

  • 写回答

3条回答 默认 最新

  • gtsfreer 2018-03-22 14:16
    关注

    这里的问题是string,string类型浅拷贝的结果是两个指针指向同一块区域,那么析构的时候就会遇到double free了,你如果想整体将结构体写入文件,那么你需要确保没有复杂的结构对象,或者你自己实现序列化才可以

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 基于ucc28019的pfc电路中芯片一直不工作
  • ¥15 yolov8在3588板子端c++推理报错
  • ¥50 unitywebrequest分段下载导致报错,如何解决?
  • ¥15 错误使用 gretna_GUI_PreprocessInterface>RunBtn_Callback
  • ¥15 WPF如何用Chart绘画出Y轴的左边数据
  • ¥15 pycharm无法查看内置代码
  • ¥15 跑hls xfopencv的例程standalone_hls_axi_example出的错误,csim没问题,c synthesis出的错误
  • ¥15 sqlserver update语句逐行生效
  • ¥20 Windows10系统命令行调用
  • ¥15 php环境如何实现国密SM2相关功能