【问题标题】:Getting Unexpected value获得意想不到的价值
【发布时间】:2020-11-12 06:25:02
【问题描述】:

我在玩数组,当我这样做时,我期待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;
}

【问题讨论】:

  • 你为什么期待IndexOutOfBound?你能指出一份文件提到这应该发生吗?越界写入(和读取)在 C++ 中是未定义的行为。让我搜索一些相关的问题。
  • total 也未初始化。因此,即使您将 for 循环修复为仅访问:for (int i = 0; i &lt; 6; i++),那么您仍然需要在循环运行之前初始化 total = 0;
  • @churill 我来自 python..尝试不同的语言来找到适合我的..在 python 上构建了几个项目之后..我正在考虑 C/C++ ......你可能知道,python中的索引将给出list index out of range
  • @prokillerinminecraft 因为这是未定义的行为,C++ 没有说明额外数字的来源。如果您想知道答案,则必须查看您的编译器和操作系统,这不是 C++ 问题。

标签: c++ increment


【解决方案1】:

C++ 不会进行任何检查以确保您的索引对数组的长度有效。 就像上面的 churill 笔记一样,超出范围的索引是未定义的行为。例如,在您的问题中, array[6] 的值是存储在您的内存中第 6 个元素存在的位置的任何值。在您的情况下,这是一个随机值,例如来自另一个变量。

虽然很少见,但 C++ 也允许您使用负索引,但会产生类似的不良结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多