我在main
内的C中创建了一个包含10个元素的数组,并且只为某些元素声明了值。打印出阵列时,我注意到其中一个未触及的元素未初始化为零。相反,它每次都被初始化为不同的大值(即1491389216
)。然后我注释掉了我的所有代码,并在最初声明它时离开了数组。
当运行代码时,数组的前8个元素被初始化为零,数组中的第9个元素被初始化为一个较大的值(如1491389216
),每次都会更改,最后一个元素一直被初始化为相同的非零数字。
有谁知道为什么会这样?
答案 0 :(得分:4)
除非您明确初始化它们,否则不会初始化本地(自动)数组。否则它们包含已经占用内存的任何随机数据。
如果要在声明数组时将所有元素清零,可以执行以下操作:
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);