我的代码是:
#includeusing 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]()
但我没有在这里看到这么做的充分理由.
- 随机文章
- 热门文章
- 热评文章
- IO上的mapM产生无限输出
- 诸神之眼-NMAP深度安全审计
- 当控制流出函数结束而没有返回时,为什么还有返回值?
- 2022-2028全球花园手推小车行业调研及趋势分析报告
- 合约广告投放系统平台架构演进实践
- Python3中的真正私有变量
- 新手小白学如何学JAVA冒泡排序
- java中定义方法的格式是什么