2016-12-16 74 views
-1

的示例代碼:如何在C使用指針的向量變量++

int main() 
{ 
    vector<string>* v; 
    v->push_back("hello"); 
    v->push_back("world"); 
    v->push_back("!"); 
    for(vector<string>::iterator it = v->begin(); it != v->end(); it++) 
    { 
     cout << *it << endl; 
    } 

    return 0; 
} 

當我使用vector<string> v,沒關係。

但是爲什麼當我使用vector<string>* v時出現分段錯誤?

+2

因爲你沒有閱讀你的編譯器的警告!它會告訴你,你使用了一個未初始化的變量('v')。 – kay

+1

這是一個指針......它指向一些你應該分配的內存(如果你正在使用一個指向本地對象的指針,那麼你應該在堆上或堆棧中)。在這裏,所述指針是未初始化的,所以它可以指向任何地址 – Rerito

+2

'v'是可以指向'std :: vector '的指針。但是,除非你將它指向一個實際的'std :: vector ',否則你無法做任何事情。 – Quentin

回答

2

你的代碼不起作用的原因是因爲你不初始化你的指針。

試試這個:

vector<string>* v = new vector<string>(); 

此外,請確保調用

delete v; 

當你不需要你的載體了。

+5

還要確定你是否真的需要動態記憶。最有可能的是你想要'矢量 v'。 – kay

+0

不要忘記'刪除'它。 – Melebius

+2

然後不要忘記刪除'new'和'delete',並用智能指針替換它們。 – Quentin