2014-01-25 89 views
1

在下面的代碼中,我試圖顯示每日報告與總銷售額。輸出正確,但是出現分段錯誤。我如何解決這個問題?C++向量分段錯誤

輸出是

Date  Total Sales 
03Nov13  745 
13Jan14  538 
Segmentation fault (core dumped) 

代碼:

for (int index=0;index<stockVector.size();index++) 
    {     
      if (stockVector[index].getTransDate() == stockVector[index+1].getTransDate()) 
      { 
       int totalSum = ((stockVector[index].getQtyPurchase() * stockVector[index].getUnitPrice()) + 
         (stockVector[index+1].getQtyPurchase() * stockVector[index+1].getUnitPrice()));     
       cout << stockVector[index].getTransDate() << "\t\t" << totalSum << endl; 
      } 
     } 

這是一個已經被存儲在向量我在文本文件中的數據。

ProductID:Description:Price:Qty:Transaction Date 

003:Calendar:5:104:03Nov13 
079:Revlon Foundation:5:45:03Nov13 
005:MacBook Pro:3500:1:10Jan14 
010:NesCafe Latte:1:9:1Jan14 
095:Lipton Tea:5:95:13Jan14 
096:Milk Tea:3:21:13Jan14 
066:Samsung Note 3:450:1:23Jan14 
088:HP Mouse:23:100:24Jan14 

回答

4

在你的循環,你使用的是可以參考的元素超出了向量的最後一個元素(當index達到stockVector.size() - 1)的索引(index+1中的條件)。在超出數組末尾的位置處解除引用指針(其調用operator[]時會執行此操作)是未定義的行爲,因此可能發生任何事情(包括獲取正確結果然後崩潰)。

爲了解決這個問題,簡單地夾緊迴路stockVector.size() - 1

for (int index=0;index<stockVector.size() - 1;index++) 
{ 
    // ... 

您可以但是要評估該解決方案是否滿足您的向量的最後一個元素。

+0

stockVector [index + 1]在循環的最後一次迭代中 – scraatz

3
stockVector[index+1] 

這將明顯晃過矢量結束時index達到size() - 1

如果您需要查看下一個元素,您將需要驗證您是否未超過矢量的末端,並且還需要確定在到達最後一個元素時要做什麼和/或有奇數個元素。