在C ++中添加数组元素时,为什么会得到极大的数字?

问题描述

我试图添加数组的前4个数字。当我测试它时,即使第一个数字4的数字是1 2 3和4,我总是得到数字“ 4201077”。当我尝试以不同的数字开头时,我会得到一个稍有不同的变体,例如“ 4201092”。 我究竟做错了什么? 代码:

int main(){
   int a [10];
   int count;


   for (int i = 0; i < 10; i ++)
       cin >> a[i];

   int i = 0;
      while ( i < 4){
       count += a[i];
       i++;
      }

   cout << count;
    
}

解决方法

您永远不会初始化count来保存任何值。行count += a[i];count读取,以便将a[i]添加到该值。在C ++中,在大多数情况下(包括该情况),从未初始化的变量读取是未定义的行为。因此,您的程序可能根本不执行任何操作,包括(但不限于)打印错误的结果,崩溃或完全不执行任何操作。

// You have:
int count;

// Replace with:
int count = 0;

始终打开所有编译器警告,并修复所有出现的警告。每个常用的编译器都将在行count += a[i];上标记警告,以警告从未初始化的变量读取。例如,gcc这样说:

main.cpp: In function 'int main()':
main.cpp:14:14: warning: 'count' is used uninitialized in this function [-Wuninitialized]
   14 |        count += a[i];
      |        ~~~~~~^~~~~~~
,

读取未初始化的变量是UB:https://en.cppreference.com/w/cpp/language/ub-在从未初始化过count += a[i];的情况下,可以使用count进行操作。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...