2017-09-02 118 views
-2

即時通訊是一個初學者在c + +。 我想在運行時創建不同大小的多個數組。 我試着編譯並運行下面的代碼。但是,與我用Google搜索的其他答案相比,它似乎並不正確。大多數結果表示應該使用new和delete或vector或其他庫實現來完成。任何人都可以幫忙指出它有什麼問題嗎?如何在運行時創建不同長度的C++數組

void Basics::TestArray(int length){ 
     int arr[length]; 
     for(int i=0;i<length;i++){ 
      arr[i] = i; 
     } 
} 
+5

可能重複的[如何創建動態數組整數](https://stackoverflow.com/questions/4029870/how-to-create-a-dynamic-array-of-integers) –

+4

使用向量而不是數組 –

+0

thx丟棄評論。來自@JamesRoot的鏈接確實提供了有關創建數組的問題,這些數組確實在問題標題中提供了問題狀態,但並不提供爲什麼我提供的代碼可以工作的額外問題。 Artemy的回答解決了我的困惑。 – PublicAngus

回答

2

變長陣列(VLA)是C99的特色。它不被標準的C++支持。一些C++編譯器提供了VLA作爲編譯器擴展的支持,但我會遠離它。

實現C++相同

最好的方法 - 通過使用標準::向量

std::vector<int> arr(length); 
for(auto i=0;i<arr.size();i++){ 
     arr[i] = i; 
} 
+0

謝謝@Artemy,解決了我的問題 – PublicAngus

0
void Basics::TestArray(int length){ 
    int *arr =new int[length]; 
    for(int i = 0; i < length; i++) { 
     arr[i] = i; 
    } 
    //do something with your array before it gets deleted 
    delete []arr; 
} 

我很驚訝,你的代碼編譯沒有錯誤,因爲「長度」需要在一個恆定的碼。

以上是使用指向數組的指針完成的一種方式,但請注意,如果使用'new'關鍵字,則必須刪除數組,否則會泄漏內存。 (因爲數組是在函數內部創建的,所以在退出函數之前必須先刪除它,因爲它將超出範圍並且將無法再次訪問它。)

如果您確實想使用動態數組通過這種方式,我認爲最好創建一個包裝類,它在超出範圍時可以在析構函數中自動刪除。 但是,建議使用上面建議的std :: vector類。

相關問題