我对是否正确打印动态数组感到有些困惑。我正在解析输入文件。假设输入文件是:
x 6 9 15
,
然后我的目标是将1,2和3存储到一个名为x的数组中。它正是这样做的。我使用以下方法设置了数组的大小:
arr = malloc(sizeof(int)*noValues);
(我的int *arr
在我的文件中声明为全局变量)
其中noValues
等于输入文件中遇到的值的数量(在本例中为3)。
然后我使用:
打印数组for (i = 0; i < noValues; i++) {
printf("arr[%d]: %d\n", j, arr[j]);
}
并获得以下输出:
arr[0]: 6
arr[1]: 9
arr[2]: 15
然而,当我改变&#34; noValues&#34;在for循环中,我得到以下内容:
并获得输出:
arr[0]: 6
arr[1]: 9
arr[2]: 15
arr[3]: 0
arr[4]: 0
arr[5]: 0
arr[6]: 49
arr[7]: 0
arr[8]: 17060496
arr[9]: 0
为什么我得到一些非0值?难道他们都不是0吗?任何清理将不胜感激。这是正常的C行为吗?
答案 0 :(得分:2)
您正在访问&#34;元素&#34;超出arr
的边界,这是{{3}};这就是为什么你得到看似随机的价值(但应用程序也可能崩溃)。
答案 1 :(得分:1)
您正在访问数组的末尾,这是未定义的行为。技术上任何都可以在你这样做时发生,但实际上通常会发生两件事情:程序会崩溃,或者你只是得到任何字节在内存中的位置值数组的结尾。 (但这不是你可以或应该依赖的东西。)
答案 2 :(得分:1)
未初始化的数组行为无法修复。未初始化数组的值为零,可以实现垃圾。如果你想得到数组中所有元素的零值,那么使用bzero或memset函数。