这是我的一段代码。如何在C++ 11标准中初始化动态大小的数组?
int** n;
for (int i = 0; i < N; ++i){
int size;
cin >> size;
int* n[i] = new int[size]; //line 13
for (int j = 0; j < size; ++j){
cin >> n[i][j];
}
}
这是在编译期间弹出的错误。
solution.cc: In function 'int main()':
solution.cc:13:33: error: array must be initialized with a brace-enclosed initializer
int* n[i] = new int[size];
我意识到这可以使用矢量来完成,因为它们更好地动态处理内存。但我不允许使用矢量来应对这个挑战。我被允许使用的唯一标题是“iostream”。
,我读了,在C++ 11中,语法已修改为新的:
p = new T [N] {initializer1, ..., initializerN};
来源:https://en.wikipedia.org/wiki/New_and_delete_(C%2B%2B)#Overview
但我的代码仍然会产生类似的变种同样的错误。
有没有办法完全绕过初始化错误?如果不是,则假定这些值被初始化为,最好是相同的值。
'n [i] = new int [size];'会让你通过编译器错误。但是,'n'是一个未初始化的指针,并且您试图对其进行解引用,因此您的程序会显示未定义的行为。 –
Igor - 将此添加为答案 – doron