检查malloc'ed指针是否为NULL

Mar*_*dds 0 c struct pointers

我有以下代码(这里简化).

#include <stdio.h>
#include <stdlib.h>
struct inner {
    int a;
    int b;
};

struct outer {
    struct inner *next;
    struct inner *prev;

};


int main(int argc, char *argv[]) {
    struct outer *c = malloc(sizeof(struct outer));

    if (c->next) {
        printf("here\n");
    }

    if (c->next != NULL) {
        printf("here too");
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,c仅分配了内存,因此c->next并且c->prev是NULL地址.但两份印刷报表仍然有效.if如果c->next不是空指针,我如何使语句工作?

Ste*_*ocy 5

A. malloc()没有将内存初始化为零,所以你的指针不一定NULL

B.访问未初始化的指针会导致未定义的行为

C. c->nextc->next != NULL基本相同的条件检查


Pra*_*ras 5

您已使用分配的内存malloc()不保证内存设置为零如果您用过calloc(),所有的内存会被设置成零,你会发现c->next,并c->prevNULL