int []中的未赋值

时间:2013-07-24 08:15:23

标签: c++ visual-c++

想在C ++中知道int[]中未分配整数的值通常是多少。

实施例

int arr[5];
arr[1]=2;
arr[3]=4;
for(int i=0;i<5;i++)
{
  cout <<arr[i] <<endl;
}

打印

-858993460
2
-858993460
4
-858993460

我们知道数组将是{?,2,?,4,?},在哪里?不明。

“?”会是什么?通常?

当我测试时,我总是得到负值。 我可以假设在C ++中,整数数组中的未分配元素总是小于或等于零吗?

如果我错了,请纠正我。当我在Java中学习时,数组中的未分配元素将产生null。

6 个答案:

答案 0 :(得分:8)

在形式上,在大多数情况下,读取未初始化值的尝试会导致未定义的行为。所以,正式地说关于实际价值的问题是没有实际意义的:你甚至不能直接看到这个价值。

实际上,C和C ++中未初始化的值是不可预测的。最重要的是,它们不应该是稳定的,这意味着多次读取相同的未初始化值并不能保证读取相同的值。

如果需要预先初始化的局部数组,请使用显式初始化器

进行声明
int arr[5] = {};

以上保证用整数零填充数组。

答案 1 :(得分:1)

  

当我测试时,我总是得到负值。

(以前)未使用的内存空间似乎填充了十六进制代码0xCC。但是,如上所述 - 几次 - 你不能依赖

在你的一条评论中,你澄清了你的任务:

  

我试图创建一个int数组,让我们说大小为100,然后将正整数随机插入数组中的任何位置。如果阵列未满。我怎么能确定数组中的那个位置是否从未被分配[?]

用零填充数组(手动或根据AndrewT的答案)。由于您只插入正整数,所以您需要测试的是!0。

答案 2 :(得分:0)

内存的单元化区域中包含的值可以是任何值,它取决于实现。最有效的实现是保留内存,因此您可以在数组中找到之前包含的内容。重要提示:it is not something you can use as a random value。一些实现(我已经看到,特别是在过去,在调试模式下编译和运行时)可能会在您的内存中放置零,但这种情况并不常见。你根本不应该依赖未初始化的记忆区域的内容。

要了解数组中是否未触及某些内容,可以将其初始化为某些值,如DEADBEEF: http://en.wikipedia.org/wiki/Hexspeak

(除非你是如此不幸,你必须插入的一个值完全对应于DEADBEEF ... :))

答案 3 :(得分:0)

你无法知道它会产生什么,因为它将那一刻内存中的位作为值。因此,您可以获得任何值,而不仅仅是负值。

答案 4 :(得分:0)

这些是垃圾值,您不能期望正确使用这些变量,并且它们无法预测它可能导致的结果。每当变量被分配时,内存的一部分会被分配给该变量,而这些部分可能先前用于其他一些您无法知道的未知计算,因此您必须使用某些值初始化这些变量以避免使用垃圾值。

答案 5 :(得分:0)

您没有在这些位置分配任何值。所以它会从内存中返回垃圾值。您必须在这些位置放置一些值。未实现的位置将以某些意外/不可预测的值返回。