vector 的 C++ 段错误

标签 c++ vector segmentation-fault

在下面的代码中,我试图显示包含总销售额的每日报告。输出正确但退出时出现段错误。我该如何解决这个问题?

输出是

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;
            }
        }

这是我存储在 vector 中的文本文件中的数据。

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),它可以引用 vector 最后一个元素之外的元素(当 index达到 stockVector.size() - 1)。在数组末尾以外的位置取消引用指针(stockVector 在其 operator[] 被调用时执行)是未定义的行为,因此任何事情都可能发生(包括获取正确的结果然后崩溃)。

要解决这个问题,只需将循环限制在 stockVector.size() - 1 即可:

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

但是,您可能必须评估此解决方案是否适合 vector 的最后一个元素。

关于 vector 的 C++ 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21356432/

相关文章:

c++ - OpenCV 2.4:在 MFC 中显示 cv::Mat

c++ - 如何使用指针确保函数调用正确

matlab - 如何 append 到 Octave 中的矢量?

c++ - 如何从 C 样式数组初始化 std::vector?

c - 在 C 中使用 tm 时出现段错误

c++ - 使用嵌套 vector

c++ - MeeGo 开发可行吗?

c++ - 标准 C++ assert() 如何工作以及如何重新定义它?

math - 某个角度的扰动向量

c - 在 ANSI C 中将 Int 值序列化到 char* 缓冲区