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

2020-01-11 20:53:32 +08:00
 trafficMGR

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

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

1892 次点击
所在节点    C++
2 条回复
wwqgtxx
2020-01-11 21:09:30 +08:00
这属于未定义行为,也就是发生什么现象都是合法的
FrankHB
2020-01-14 11:43:09 +08:00
为什么要报错?谁有义务报错?
虽然 glibc 是有 double free detection,但也没保证。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/637145

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX