2015-03-03 183 views
-3

什麼可以解釋爲什麼cout在此代碼中不顯示任何內容?我知道它與v [0] = 1行有關;但我找不到原因,有人對此有解釋嗎?C++ cout沒有顯示任何內容

編輯:我也知道改變v [0] = 1; for v.push_back(1);會解決問題。

#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    vector<int> v; 
    v[0] = 1; 
    cout << "Hello" << endl; 
    return 0; 
} 
+1

因爲計算機永遠不會到達那條線,因爲程序在前一行崩潰。 – immibis 2015-03-03 03:36:45

+0

對不起,這只是一個錯誤的複製/粘貼,這不是原因。 – 2015-03-03 03:38:07

+2

只要您調用未定義的行爲,程序的其餘部分就不確定。 – 2015-03-03 03:39:03

回答

1

,因爲你還沒說矢量v多少元素有你不能這樣做v[0]=1。因此,它會導致運行時錯誤(崩潰)

聲明爲vector<int>v(10)(這是說v將有10種元素) 和使用v[0]=1

或者

如果你不知道矢量大小預先使用v.push_back(1);

+0

你會如何解釋爲什麼編譯器不會抱怨它? – 2015-03-03 03:43:28

+0

它不檢查「outofbound」訪問。它會導致未定義的行爲 – user7 2015-03-03 03:45:05

+0

@ A.P。請參閱http://stackoverflow.com/q/14015632/4405757。 – user7 2015-03-03 03:46:13

3

此代碼線

v[0] = 1; 

實際上調用未定義的行爲,因爲與此地址關聯的內存未分配。

您在此行前加上例如

v.resize(1); 
v[0] = 1; 

確保向量項被分配。


#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    vector<int> v; 
    v.resize(1); 
    // alternatively 
    // vector<int> v(1); 

    // alternatively 
    // v.push_back(0); 
    v[0] = 1; 
    cout << "Hello" << endl; 
    return 0; 
} 

fully working sample