這是我的一段代碼。如何在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