我使用下面提到的只是简单了解malloc。正如我所听到并研究的那样,malloc为您分配了一个非主流存储。所以这个程序的输出应该是垃圾值。但我得到0作为输出。请告诉我这里有什么问题?
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *x =(int*)malloc(100000000*sizeof(int));
printf("%d",x[0]);
return 0;
}
输出0
答案 0 :(得分:3)
如果malloc
返回空指针,并且您取消引用此空指针,则未定义行为。
如果不返回NULL
,那么内存的内容是 indeterminate 并且无需初始化就以任何方式使用 未定义的行为。
但是为了解释你的行为, if 你得到一个非空指针,那么不确定值的可能值之一就是零。如果你得到一个空指针,那么你可能会遇到崩溃而不是打印零。
此外,某些环境可能会在调试时将内存初始化为某些值。在调试器中运行时,清除所有内容(即将大多数或全部设置为零)很常见
答案 1 :(得分:2)
这是垃圾问题(以及未定义的行为) - 它可能是任何。在属于“任何事物”类别的行为中,看起来它正在做一些明智的事情。
(P.S。你还应该测试malloc
的返回值;可能会发生错误,它会通过返回空指针来表示错误)
答案 2 :(得分:1)
您正在使用不确定的值打印存储内容。这是未定义的行为。任何事情都可能发生。可能发生的一些事情是应用程序崩溃,洗衣机开始洗涤,或者计算机打印零号。