【问题标题】:C++ Range Error at Memory Location?内存位置的 C++ 范围错误?
【发布时间】:2013-10-03 14:29:29
【问题描述】:

这里是新手。尝试运行这个短程序时,我似乎在内存位置出现 Range Error。我不知道这意味着什么,而且有点令人沮丧。

int main()
{
int grains_current = 1;
vector <int> previous;
int sum = 0;
int i = 0;

for (int i = 0; i<10; ++i) sum += previous[i];
    previous.push_back(grains_current);

    grains_current = grains_current*2;

    if (sum >= 10)
        cout<<i<<"\t\n\n";

【问题讨论】:

  • 您的缩进表明您打算将for 之后的所有行都放在循环中,但事实并非如此。他们必须在括号内才能发生这种情况。

标签: c++ memory vector location range


【解决方案1】:
sum += previous[i];

此时,向量previous 尚未被赋予任何值,因此您将获得访问此地址超出范围的未定义行为。

更新:我认为您的代码应该是这样的:

for (int i = 0; i < 10; ++i)
{
    previous.push_back(grains_current);
    sum += previous[i];

    grains_current *= 2;

    if (grains_current >= 1000)
        std::cout << sum << "\n\n";
}

【讨论】:

  • 问题是:国​​际象棋的发明者因为创造了这个游戏而获得了奖励……发明者要求第一格要一粒米,第二格要 2 粒,第三格要 4 粒,依此类推.编写一个程序,计算给发明者至少 1000 粒米需要多少个正方形。
  • @RavenEye 查看更新后的代码。告诉我它是否适合你。 :)
  • 谢谢,效果很好,我可以看到哪里出错了。我只需要找到拥有 1000 个颗粒所需的正方形数量,但只需打印出循环编号 (i) 就可以了,对吧?
  • @RavenEye 是的。你应该打印出i 然后break;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
相关资源
最近更新 更多