内存位置的 C++ 范围错误?

Posted

技术标签:

【中文标题】内存位置的 C++ 范围错误?【英文标题】:C++ Range Error at Memory Location? 【发布时间】: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 之后的所有行都放在循环中,但事实并非如此。他们必须在括号内才能发生这种情况。 【参考方案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;

以上是关于内存位置的 C++ 范围错误?的主要内容,如果未能解决你的问题,请参考以下文章

矢量:内存范围错误

C++程序运行内存错误

c++ 类向量中的段错误

c++错误0x... 处(位于... .exe 中)引发的异常: 0xC0000005: 读取位置 0x...时发生访问冲突?

C++ 错误:未在此范围内声明类/对象

C++ 错误:“QueryFullProcessImageNameA”未在此范围内声明