内存位置的 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++错误0x... 处(位于... .exe 中)引发的异常: 0xC0000005: 读取位置 0x...时发生访问冲突?