我的代码是:
#include <iostream>
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<<a[i]<<" ";
delete[] a;
cout<<"NEW MEM ";
a = new int[5];
for(int i = 0; i < 5; i++)
cout<<a[i]<<" ";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
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
也许你期望这new int[5]会将新的内存块初始化为零.
好吧,它没有!这就是那个.C++没有做你没有要求的事情,因为如果你不想要它们,那就是不必要的性能损失.
看起来你的新内存块恰好位于与最后一个相同的位置,现在你[部分]观察到最后一个留下的值.从技术上讲,这些值是未指定的,读取它们意味着您的程序具有未定义的行为.您必须先为这些新数组元素提供自己的新值,然后才能将它们用于真正有意义的事物.
或许您可能期望将delete[]初始化的内存块初始化为零.
这也不会发生.归零对象并没有任何意义,就像它们即将消失一样.同样,C++不会在这样的事情上浪费时间.
您可以进行零初始化,new int[5]()但我没有在这里看到这么做的充分理由.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |