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