向量下标超出范围 - C ++

时间:2015-05-23 20:35:02

标签: c++ debugging vector range

我正在使用visual studio 2013.我正在尝试从向量中获取子向量:

std::vector <Ponto> pontosDeControle;
std::vector<Ponto> subPontosDeControle;

向量pontosDeControle填充了一些对象,然后我从位置i得到子向量到pontosDeControle.size() - 1:

   subPontosDeControle = std::vector<Ponto>(&pontosDeControle[i], &pontosDeControle[pontosDeControle.size()]);

其中i小于pontosDeControle.size() - 3。

此代码返回调试断言失败:向量下标超出范围。但是,在发布模式下工作正常。

我在这里没有看到问题。

2 个答案:

答案 0 :(得分:2)

在调试模式下,编译器会检查此表达式中使用的索引

.nivoSlider is not a function

超出范围。

您可以改为编写

pontosDeControle[pontosDeControle.size()]

这将更加明确和正确。

答案 1 :(得分:1)

对于大小为v的向量v.size(),您只能访问索引0 ... v.size() - 1(当然,如果v.siz() == 0则无法访问指数)。如果你想获得一个指向最后一个元素的指针(你可以合法地得到这个地址),你可以使用这样的东西:

v.data() + v.size()

对于您要使用的操作,您不需要使用元素的地址:您可以使用迭代器:

subPontosDeControle.assign(pontosDeControl.begin() + i, pontosDeControl.end());