2014-02-27 100 views
-2

我想這個代碼我的錯在哪裏?

#include <iostream> 
#include <vector> 
#include <string> 
#include <iterator> 

using namespace std; 

class Tex 
{ 
    public: 
    int ii; 
}; 

vector <Tex> tex; 
vector <Tex>::iterator itexx; 

int main() 
{ 
    Tex texx; 
    texx.ii = 9; 
    tex.push_back(texx); 

    cout << itexx->ii; 
    return 0; 
} 

當我運行這段代碼,編譯器是給我段錯誤或者更確切地說,「程序收到SIGSEGV段錯誤」。

我不知道這個錯誤的含義。我的代碼有什麼問題?

+1

你的代碼應該做什麼? – thebjorn

+0

是不是打印出來9; – user241621

+0

好的,但在這些情況下問自己的問題是_how_是否應該發生,然後驗證您假設的每一步...... – thebjorn

回答

5

itexx是一個無效的迭代器。你需要通過分配一個有效的迭代器來使它「指向」某個東西。例如,

itexx = tex.begin(); 
if (itexx != tex.end()) 
    std::cout << itexx->ii; 
+0

對不起,提出了一個愚蠢的問題,我知道了 – user241621

+0

@ user241621很高興幫助。請注意,像這樣緩存迭代器可能會很麻煩,因爲矢量的迭代器在向量增長時會失效。所以你必須小心。 – juanchopanza

1

cout << itexx->ii;你試圖取消引用itexx但你沒有它分配給什麼就行了。

至少,你需要做的是這樣itexx = tex.begin();

這應該指向itexx的矢量tex的第一要素。