没有pointee指针不return null?

No pointee pointers does not return null?

我有一个问题。为什么 2 个指针的输出不同?我没有将指定对象分配给任何一个,但一个不 return NULL 而一个 returns NULL.

typedef struct node
{
    bool word;
    struct node* children[27];
}
node;

int main(void)
{
    node header;
    node* header_2 = malloc(sizeof(node));

    printf("%p %p\n", header.children[1], header_2->children[1]);
}

输出:0xbfba76d4(无)。不应该都为 NULL 吗?非常感谢!

考虑以下情况:

int i;
int *j = malloc(sizeof(int));
printf("%d, %d", i, (*j)) ;

(你不能保证 i=0 和 *j=0,因为两者都分配了内存,但它们的值可能是垃圾值,这是该内存位置之前占用的值)

为了有定义的值,总是用0初始化allocation/initialization。

node a;                              // Everything default-initialized

void foo()
{
    static nodeb;                   // Everything default-initialized

    node c;                         // Nothing initialized
    node d = { 0 };                 // Everything default-initialized
    node *p = malloc(sizeof(*p));    // Nothing initialized
    node *q = calloc(1, sizeof(*q)); // Everything zero-initialized
}
  • 一切都默认初始化意味着它们被初始化为默认值零。
  • 没有初始化意味着它们将保留可能是垃圾值或零的位置值。

参考 link:C struct with pointers initialization

这一行:节点头;

将包含堆栈中头变量地址处的任何垃圾。

这一行:node* header_2 = malloc(sizeof(node));

将包含调用 malloc

返回的任何内容

(其中,如果 malloc 成功,将是指向 'heap' 中某处的指针,如果 malloc 失败,则为 NULL)