簡體   English   中英

向量的C ++分段錯誤

[英]C++ Segmentation fault with vector

在下面的代碼中,我試圖顯示帶有總銷售額的每日報告。 輸出正確,但由於分段錯誤而退出。 我該如何解決這個問題?

輸出是

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

在循環中,您使用的索引(條件中為index+1 )可以引用超出向量最后一個元素的元素(當index達到stockVector.size() - 1 )。 在數組末尾以外的位置stockVector引用指針( stockVector在調用其operator[]時將執行此operator[] )是未定義的行為,因此任何事情都可能發生(包括獲得正確的結果然后崩潰)。

為了解決這個問題,只需將循環固定在stockVector.size() - 1

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

但是,您可能必須評估該解決方案是否適合矢量的最后一個元素。

stockVector[index+1]

index達到size() - 1時,這顯然會超出向量的末尾。

如果您需要查看下一個元素,則需要驗證自己沒有超出向量的末尾,並且還需要弄清楚到達最后一個元素和/或具有奇數時該怎么做。的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM