登陆

使用delete[]后元素仍然保留

admin 2022-12-03 4人围观 ,发现0个评论

我的代码是:

#include  using namespace std;  int main() {     // your code goes here      int* a;      a = new int[5];     for(int i = 0; i <5; i++)         cin>>a[i];      for(int i = 0; i <5; i++)         cout<  

INPUT:1 2 14 4 5和OUTPUT:1 2 14 4 5 NEW MEM 0 0 14 4 5

请解释为什么我没有得到OUTPUT:1 2 14 4 5 NEW MEM 0 0 0 0 0



1> Lightness Ra..:

也许你期望这new int[5]会将新的内存块初始化为零.

好吧,它没有!这就是那个.C++没有做你没有要求的事情,因为如果你不想要它们,那就是不必要的性能损失.

看起来你的新内存块恰好位于与最后一个相同的位置,现在你[部分]观察到最后一个留下的值.从技术上讲,这些值是未指定的,读取它们意味着您的程序具有未定义的行为.您必须先为这些新数组元素提供自己的新值,然后才能将它们用于真正有意义的事物.


或许您可能期望将delete[]初始化的内存块初始化为零.

这也不会发生.归零对象并没有任何意义,就像它们即将消失一样.同样,C++不会在这样的事情上浪费时间.


您可以进行零初始化,new int[5]()但我没有在这里看到这么做的充分理由.

请发表您的评论
25545文章数 0评论数
最近文章
请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP