我试图在声明二维数组时初始化它的所有元素:
int** ints = new int* [n] { new int[n] { 0 } };
尝试显示项目时
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cout << "i = " << i << "; j = " << j << "; value = " << ints[i][j] << endl;
我在控制台中得到这个结果:
i = 0; j = 0; value = 0
i = 0; j = 1; value = 0
i = 0; j = 2; value = 0
i = 1; j = 0; value =
抛出异常:нарушение прав доступа при чтении по адресу 0x0000000000000000
。
我不知道发生了什么事。
n = 3
.
当显示初始化如下的一维数组的元素时:
int* ints = new int[5];
输出到控制台
-842150451
-842150451
-842150451
-842150451
-842150451
,但像这样:
int* ints = new int[5] { 0 };
-
0
0
0
0
0
.
初始化具有指定大小的数组时,缺少的初始值设定项为空值。那些。
a
用值 6,0,0,0,0填充数组。注意 - 按值初始化,而不是表达式评估 :)
不适
i++
用于所有数组元素。做什么
? 计算单个值
new int[n] { 0 }
并将其分配给数组的第一个元素。其余部分用零填充。下一个明确吗?:)如果你想完全使用 C++,而不是一些变异的 C,那么
vector
你有:而且不用担心释放内存:)
更新
关于扩展问题 - 在完全没有初始化程序的情况下,不执行初始化,结果数组被垃圾填充。