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() << "tt" << 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
称为operator[]
时)是不确定的行为,因此任何事情都可以发生(包括获得正确的结果,然后崩溃)。
要解决这个问题,只需将循环固定到 stockVector.size() - 1
:
for (int index=0;index<stockVector.size() - 1;index++)
{
// ...
但是,您可能必须评估此解决方案是否适合向量的最后一个元素。
stockVector[index+1]
当index
到达size() - 1
时,显然会超越向量的末端。
如果您需要窥视下一个元素,则需要验证您不会超越向量的末端,还需要弄清楚当您到达最后一个元素和/或有什么时候该怎么办奇数元素。
相关文章:
- 分割故障C++矩阵
- C ,二进制树的高度,而不是检查我的子树是否为空,而是在检查我的子树是否是叶子节点.抛出分割故障
- 我正在为此代码分割故障
- 在执行strcpy时获取分割故障错误
- 空隙指针分割故障
- Xcode会产生分割故障,而不是例外
- OPENCV C 中的分割故障误差
- 分割故障:核心倾倒C 矢量对字符串:
- C 2D数组导致分割故障(核心倾倒)
- 分割故障/错误读数变量-C 列表
- DLSYM导致分割故障
- 使用C 中的操作员删除的分割故障
- 使用Linux X64下的Libmozjs-52(SpidermonKey)进行分割故障
- 使用长变量时分割故障(11)错误
- C - 返回字符串时的分割故障
- 创建VertexArray时的分割故障
- 向量分割故障的向量
- 从std :: fileSystem ::路径对象的类中退出时的分割故障
- C 矢量分割故障
- 基于向量的数据格式的分割故障误差