内存分配和NULL指针

Mah*_*mam 1 c

我很困惑.

第一:

int *ptr;
ptr = malloc(10 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

这种类型在运行时获取动态(堆)内存,而不是像数组一样编译时.

malloc()NULL如果没有记忆,可能会返回.

并且NULL#define标准C库中的一个#define NULL ((void *)0)

所以,如果malloc返回NULL它在运行时执行,编译器将如何替换NULL,void *0我知道任何文本替换发生在预编译阶段

cni*_*tar 5

不,你错了.想象一下这样的malloc函数:

void *malloc(size_t n)
{
    /* magic */
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

当编译NULL 该转换单元时,编译器将替换,即编译标准库时,不会NULL在预处理器阶段之后存活.在那之后,为了它的价值,malloc只返回数字.