【问题标题】:int array element not initialized to zero in C在 C 中未初始化为零的 int 数组元素
【发布时间】:2017-05-30 05:02:55
【问题描述】:

我在 main 内部的 C 中创建了一个包含 10 个元素的数组,并仅声明了一些元素的值。在打印出数组时,我注意到其中一个未触及的元素未初始化为零。相反,它每次都被初始化为不同的大值(即1491389216)。然后我注释掉了我的所有代码,并按照我最初声明的方式保留了数组。

运行代码时,数组的前 8 个元素被初始化为零,数组中的第 9 个元素被初始化为一个很大的值(如1491389216),每次都在变化,最后一个元素是一致的被初始化为相同的非零数。

有人知道为什么会这样吗?

【问题讨论】:

标签: c arrays initialization int


【解决方案1】:

除非您明确初始化它们,否则不会初始化本地(自动)数组。否则它们包含任何已经占用内存的随机数据。

如果你想在声明数组时将所有元素归零,你可以这样做:

int arr[10] = {0};

或者:

int arr[10] = {};

取决于您的编译器(GCC 允许这样做,除非您指定 -pedantic)。

或者,直接使用memset()

int arr[10];
memset(arr, 0, sizeof(arr));

同样,malloc() 分配的内存——或realloc() 扩展的内存——没有初始化;使用calloc() 对此类数据进行零初始化:

int *arr = (int*) calloc(10, sizeof(int));
...
free(arr);

【讨论】:

  • 使用calloc函数我猜也满足
  • 自动 数组未初始化。静态的是。马上。
猜你喜欢
  • 1970-01-01
  • 2015-11-11
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
相关资源
最近更新 更多