【发布时间】:2016-12-21 01:31:48
【问题描述】:
这是我的一段代码。
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:在函数'int main()'中:
solution.cc:13:33: 错误:数组必须用大括号括起来的初始化程序进行初始化
int* n[i] = new int[size];
我意识到这可以使用向量来完成,因为它们在动态处理内存方面要好得多。但是我不允许在这个挑战中使用向量。我被允许使用的唯一标头是“iostream”。
我读到,在 C++11 中,语法已被修改为 new:
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 - 添加这个作为答案
标签: c++ arrays c++11 initialization dynamic-memory-allocation