读书人

delete [3]p 到底删除的是个什么?该怎

发布时间: 2012-04-11 17:42:33 作者: rapoo

delete [3]p 到底删除的是个什么?

C/C++ code
void main(){    int *p = new int[100];    delete [3]p;    p[0] = 0;    p[1] = 1;    p[2] = 2;    p[6] = 6;    p[3] = 0;    p[99] = 0;    return;}

现在有这么一段代码,我和同学讨论了半天,有关于这个delete [3]p到底删除的是什么,他说删除前三个,我给前三个赋值,程序没崩,给p[3]赋值还是不崩,给99下标赋值,依然不崩。那到底删除的是个啥??

这段程序在 VS 2010,Win7 32bit环境下编译成功且不崩溃

[解决办法]
那个[]里的int就被忽略了吧.....
[解决办法]
delete掉之后的内存虽然是未知的,但是仅仅是未知,不代表只要访问就会出错
delete [3]p;没见过这个,见过delete[100]p;但是这个100是没有任何意义的,和
delete []p效果一样

[解决办法]
历史上delete是需要指定数量的,但是后来发现各种操作系统实现的内存管理都能够自己获得分配的大小,就取消了

读书人网 >C++

热点推荐