2012-08-03 28 views
6

我對C++尤其是STL相當陌生。我試圖將一個向量作爲參數傳遞給一個函數,但它會導致應用程序崩潰。我使用的是Code :: Blocks和MingW。這是一個簡單的代碼。傳遞一個向量作爲參數並使用它,它爲什麼會崩潰?

#include <iostream> 
#include <vector> 

using namespace std; 

void foo(const vector<int> &v) 
{ 
    cout << v[0]; 
} 
int main(){ 
    vector<int> v; 
    v[0] = 25; 
    foo(v); 
return 0; 
} 

謝謝!

回答

6

它崩潰,因爲你寫了v[0]的向量末尾 - 這是未定義的行爲。如果你什麼都不做,它的初始大小是0。 (您隨後也讀了同樣的內容,但在此之前所有投注都已關閉)。如果您使用v.at(n)而不是[]操作符,你會得到拋出異常,而不是不確定的行爲

vector<int> v(1); 
v.at(0) = 25; 
foo(v); 

你可能想要做的:

vector<int> v; 
v.push_back(25); 
foo(v); 

也許。

+0

謝謝!我應該更多地瞭解STL。我將一個向量看作一個顯然錯誤的簡單數組! – Physer 2012-08-03 17:51:39

+0

@Physer - 一個向量在很多方面類似於數組。讀取矢量的末尾不比閱讀數組的末尾更好/更差。 – Flexo 2012-08-03 17:53:24

+0

我明白你的意思了。這是我正在處理的更大代碼的摘錄。最初,我給了矢量大小v(100)並使用循環填充它,如v [i] = value; ... – Physer 2012-08-03 18:18:55

相關問題