c++ - 获得意想不到的价值
问题描述
我正在玩数组,当我这样做时,我期待着IndexOutOfBound
程序仍然运行并给出输出54
额外的数字来自哪里?
如何避免这类索引问题?
#include <iostream>
int main(){
int array[] = {1,2,3,4,5,6};
int total;
for(int i = 0 ; i<=7 ; i++){
total += array[i];
}
std::cout << total;
return 0;
}
解决方案
C++ 不会进行任何检查以确保您的索引对数组的长度有效。就像上面的 churill 笔记一样,超出范围的索引是未定义的行为。例如,在您的问题中, array[6] 的值是存储在您的内存中第 6 个元素存在的位置的任何值。在您的情况下,这是一个随机值,例如来自另一个变量。
虽然很少见,但 C++ 也允许您使用负索引,但会产生类似的不良结果。
推荐阅读
- javascript - 提交表单后,我的表单字段变为必填项?
- java - Java:for in for,相同的arraylist和比较
- ruby-on-rails - 如何为图像的回形针宝石验证添加 rspec
- php - PHP Mysqli 总是返回 0 行
- sql-server - 确定最终的 Windows 用户
- artifactory - jfrog rt glc 在 refs/remotes/* 中搜索匹配的工件存储库文件。git lfs 将这些文件放在 lfs\objects
- xslt - 尝试在结果文档中删除元素并重新排序元素
- javascript - 防止 VueX 中的持久状态锁定应用程序
- python - 尽管 em 在 $PATH 中,Sphinx 找不到模块
- ios - 将文本设置为 shouldChangeCharactersIn 内的 UITextField 后,光标结束