我使用下面提到的内容来简单了解 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
最佳答案
如果 malloc
返回一个空指针,并且您取消引用该空指针,则会出现未定义的行为。
如果它不返回NULL
,那么内存的内容不确定并且在没有初始化的情况下以任何方式使用它都是< em>仍然未定义的行为。
但是为了解释您的行为,如果返回一个非空指针,则不确定值的可能值之一为零。如果你得到一个空指针,那么你可能会崩溃而不是打印一个零。
此外,某些环境在调试时可能会将内存初始化为某些值。在调试器中运行时,清除所有内容(即将大部分或所有内容设置为零)很常见
关于c - Malloc 返回归零内存作为输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38945253/