看网课学习深拷贝与浅拷贝时,写了一段重复释放内存的代码:
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
1
wwqgtxx 2020-01-11 21:09:30 +08:00 via iPhone 1
这属于未定义行为,也就是发生什么现象都是合法的
|
2
FrankHB 2020-01-14 11:43:09 +08:00
为什么要报错?谁有义务报错?
虽然 glibc 是有 double free detection,但也没保证。 |