V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
trafficMGR
V2EX  ›  C++

重复释放内存,而且没有报错!

  •  
  •   trafficMGR · 2020-01-11 20:53:32 +08:00 · 1889 次点击
    这是一个创建于 1780 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看网课学习深拷贝与浅拷贝时,写了一段重复释放内存的代码:

    int *p=new int(1);
        delete(p);
        delete(p);
    

    在用 VisualStudio buildTools 编译出来,执行时一定会报错误:CrtlsValidHeadPointer(block)。

    但是在 Linux 系统里面编译运行,程序正常结束,返回值为 0。咦,为何没有报错?( return 139 或者其他)

    环境是:Clion + WSL + c++(Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0

    wwqgtxx
        1
    wwqgtxx  
       2020-01-11 21:09:30 +08:00 via iPhone   ❤️ 1
    这属于未定义行为,也就是发生什么现象都是合法的
    FrankHB
        2
    FrankHB  
       2020-01-14 11:43:09 +08:00
    为什么要报错?谁有义务报错?
    虽然 glibc 是有 double free detection,但也没保证。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1301 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:57 · PVG 01:57 · LAX 09:57 · JFK 12:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.