2013-10-13 240 views
1

因爲這是我第一次嘗試使用向量指針,所以我對它進行了一些研究,並在我的程序中嘗試了它,但是它並沒有給我想要的結果,儘管它對它是封閉的。請如果我問一個糟糕的問題,請原諒我。C++向量指針

+1

你需要的,如果可以縮短下來設置爲0。這很長,大多數人不會被打擾閱讀/回答 –

+0

@PreetKukreti如果我縮短我的代碼,大多數人通常會感到困惑 – user3493435

+2

這將幫助您嘗試縮小到[SSCCE](http:// sscce。 org /)以及其他。這是您可以通過在調試器中逐步執行程序輕鬆追蹤的問題。 –

回答

3

您的錯誤是當您打印矢量的內容時,而不是您向其中添加數據時。

for (int i= 0; i<5; i++) { 
    if(storeData.empty()) { 
     cout <<"<no other records available>" << endl; 
    } 
    // error: storeData[i] may not be valid 
    else if(storeData[i].getCivIndex() == 0 && storeData[i].getXOrdinate() == 0 && storeData[i].getYOrdinate() == 0) { 
     cout << "<no other records available>" << endl; 
    } 
    else { 

     cout << "Civ Index:"<< storeData[i].getCivIndex() << ",at Sector("<< storeData[i].getXOrdinate() << "," << storeData[i].getYOrdinate() <<")" << endl; 

    } 
} 

即使向量包含更少,您仍然一直在閱讀5條記錄。在解引用它之前,你應該檢查矢量的大小,否則你正在讀取隨機存儲器,並導致未定義的行爲。

if(storeData.size() <= i) { 
     cout <<"<no other records available>" << endl; 
    } 
+0

感謝您的幫助 – user3493435

1
if(storeData.size() > 5) { 
    storeData.resize(5); 
} 

首先我想在這裏你的意思if(storeData.size()<5)否則下面的印刷肯定會失敗,因爲你只能訪問storeData[0],而您嘗試訪問其他人。

當你做resize沒有第二個參數時,添加到向量中的項目將被默認構建。如果PointTwoD結構不提供默認構造函數,則其數據成員將不會被初始化,這意味着它可能以隨機值結束。這就是爲什麼你有這些奇怪的數字。 (0也是可能的)。

的解決方案是定義一個默認構造pointTwoD及其數據成員在初始化列表或call resize with a second argument.

+0

已經設法解決它。謝謝你的建議 – user3493435