Malloc将归零内存作为输出返回

时间:2016-08-14 18:22:53

标签: c

我使用下面提到的只是简单了解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

3 个答案:

答案 0 :(得分:3)

如果malloc返回空指针,并且您取消引用此空指针,则未定义行为

如果返回NULL,那么内存的内容是 indeterminate 并且无需初始化就以任何方式使用 未定义的行为。

但是为了解释你的行为, if 你得到一个非空指针,那么不确定值的可能值之一就是零。如果你得到一个空指针,那么你可能会遇到崩溃而不是打印零。

此外,某些环境可能会在调试时将内存初始化为某些值。在调试器中运行时,清除所有内容(即将大多数或全部设置为零)很常见

答案 1 :(得分:2)

这是垃圾问题(以及未定义的行为) - 它可能是任何。在属于“任何事物”类别的行为中,看起来它正在做一些明智的事情。

(P.S。你还应该测试malloc的返回值;可能会发生错误,它会通过返回空指针来表示错误)

答案 2 :(得分:1)

您正在使用不确定的值打印存储内容。这是未定义的行为。任何事情都可能发生。可能发生的一些事情是应用程序崩溃,洗衣机开始洗涤,或者计算机打印零号。