没有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)
我有一个问题。为什么 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)