【问题标题】:Debug assertion failed, C++ vector subscript out of range调试断言失败,C++ 向量下标超出范围
【发布时间】:2016-05-02 13:46:28
【问题描述】:

我知道以前有人问过这个问题,但即使在查看了所有其他问题之后,我似乎也无法弄清楚这一点。我得到以下代码的“向量下标超出范围”:

double forward_price(int number_divs, std::vector<double> *dividends, std::vector<double> *time_dividends)
{
    int i = number_divs - 1;
    for (; i >= 0 & (*time_dividends)[i] > 0.0;)
        i--;

    for (; i >= 0 & (*time_dividends)[i] > 0.0; i--)
    {
        forward_px -= (*dividends)[i]
    }

    return forward_px;

}

int number_divs = 3;
std::vector<double> dividends = { .5, .6, .58 };
std::vector<double> time_dividends = { .04, .198, .6 };

double forward_div = forward_price(3, &dividends, &time_dividends);

据我所知,它来自第二个 for 语句,并且当我将其更改为 i>=1 时起作用。我可以调用 time_dividends[0] 和 divides[0] 所以我不知道为什么这不起作用。

【问题讨论】:

  • 另外,你为什么使用指向向量的指针,为什么你觉得有必要将它们的长度作为一个额外的参数传递?这不是 C。
  • 我认为传递指针会更有效,但我可能弄错了。我最近修改了代码以使用向量而不是数组,因此传递长度是它的遗物。
  • 如果你真的想要输出参数,使用引用而不是指针。对于可能很大的仅输入参数,请使用const 参考。
  • 好的,谢谢,我试试

标签: c++ vector


【解决方案1】:

&amp;中的单曲

i >= 0 & (*time_dividends)[i] > yte_forward

是一个“位与”,你可能想要“逻辑与”&amp;&amp;

【讨论】:

  • 这两种情况。
  • 请注意,如果左边为假,则逻辑与 (&&) 不会计算右侧,而按位计算则不会计算右侧,并且该计算会产生访问错误。
猜你喜欢
  • 2016-02-14
  • 1970-01-01
  • 2017-06-18
  • 2021-12-22
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
相关资源
最近更新 更多