这里是我使用的代码:是malloc()初始化分配数组为零?
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int sz = 100000;
arr = (int *)malloc(sz * sizeof(int));
int i;
for (i = 0; i < sz; ++i) {
if (arr[i] != 0) {
printf("OK\n");
break;
}
}
free(arr);
return 0;
}
程序不打印OK
。 malloc
不应该将分配的内存初始化为零。这是为什么发生?
内存的内容是* indeterminate *。它可能看起来是随机的。或者它可能全部为零。你根本不知道事先。 –
*“程序不打印OK,malloc不应该将分配的内存初始化为零。”* - 它也不能保证*不是全部为零。无论哪种方式,通过读取不确定的值,您的程序具有未定义的行为。你无法期待任何事情。 – StoryTeller
此外,调试构建可能实际上会导致您分配的内存甚至局部变量被初始化。使内存和指针问题更易于检测。 –