zoukankan      html  css  js  c++  java
  • 两次fopen不同的文件返回相同的FILE* 地址

        最近接触一个垃圾程序,出现一个奇怪的bug,现象是两次fopen不同的文件返回相同的FILE*地址,第二次返回的FILE*有时候无端端的就被关闭了。以下代码是对这个bug的概括:

    auto fp1 = fopen("c:/1.txt", "rb");    

    char buff[10];    

    assert(fread(buff, 1, 10, fp1) == 10);    

    // 垃圾程序关闭fp1时没有至fp1=nullptr    

    fclose(fp1);

    // 微软的crt对FILE*使用缓存机制,所以这里返回的fp2==fp1,可参考stream.c里的_getstream函数    

    auto fp2 = fopen("c:/1.txt", "rb");

    // 垃圾程序的垃圾结构引起第二次关闭fp1,事实上,这里将引起fp2的关闭    

    fclose(fp1);    

    // 于是垃圾程序读fp2失败    

    assert(fread(buff, 1, 10, fp2) == 10);

    最后,都用C++喇,谁tmd还用fopen这么古老的api,次凹!!!!

  • 相关阅读:
    var、let、const
    面向女朋友自我介绍
    ES6——class
    一个错误引发的——对异步回调与for循环(小白错误,大神勿进)
    关于this
    关于作用域
    HTML5 8
    HTML5 7
    HTML5 6
    HTML5 4
  • 原文地址:https://www.cnblogs.com/rickerliang/p/3189632.html
Copyright © 2011-2022 走看看