V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
trafficMGR
V2EX  ›  C++

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

  •  
  •   trafficMGR · Jan 11, 2020 · 2305 views
    This topic created in 2302 days ago, the information mentioned may be changed or developed.

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

    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  
       Jan 11, 2020 via iPhone   ❤️ 1
    这属于未定义行为,也就是发生什么现象都是合法的
    FrankHB
        2
    FrankHB  
       Jan 14, 2020
    为什么要报错?谁有义务报错?
    虽然 glibc 是有 double free detection,但也没保证。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2343 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 04:56 · PVG 12:56 · LAX 21:56 · JFK 00:56
    ♥ Do have faith in what you're doing.