【发布时间】:2015-07-21 21:51:04
【问题描述】:
我正在尝试使用 new 运算符来分配二维数组。这是我的函数 new2d。
int** new2d(int r, int c)
{
int **t = new int*[r];
for(int i = 0; i < r; i++)
t[i] = new int[c];
return t;
}
我很确定这是正确的方法。但是,当我尝试像下面这样打印数组时
int **a = new2d(5, 9);
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 9; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
它以随机 13,10,7... 给出这个奇怪的输出...
0 0 0 0 13 0 0 0 0
0 0 0 0 10 0 0 0 0
0 0 0 0 7 0 0 0 0
0 0 0 0 4 0 0 0 0
0 0 0 0 0 0 0 0 0
为什么会这样?
【问题讨论】:
-
您从未初始化每一行中的值。您看到的数据是不确定的。将此:
new int[c];更改为:new int[c]();。更好的是,将整个内容更改为std::vector<std::vector<int>> a(5, std::vector<int>(9)); -
众所周知
new不需要为您初始化分配的内存。如果是这样,并且您想要的不是默认初始化,new将为您做出决定,只会浪费您的时间。但是,通过在目标对象上特意指定构造函数,您可以让 它 执行它自己定义的初始化。 -
我强烈建议按照 WhozCraig 所说的去做。使用原始指针是有风险的。
-
^ 特别是当 C++ 提供了这么多更好的解决方案时。
-
知道了,谢谢大家!但是新的 int[c]( ); 是什么?为了?
标签: c++ arrays constructor initialization new-operator