我有一个问题。为什么2个指针的输出不同?我没有将指针指派给任何一个,但是一个不返回NULL而一个返回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吗?非常感谢!
答案 0 :(得分:0)
考虑以下情况:
int i;
int *j = malloc(sizeof(int));
printf("%d, %d", i, (*j)) ;
(你不能保证i = 0和* j = 0,因为已经为两者分配了一个内存,但它们的值可能是垃圾值,这是该内存位置之前占用的内容)
为了获得定义的值,请始终使用0
初始化分配/初始化。
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
}
答案 1 :(得分:0)
这一行:节点标题;
将包含标头变量地址处堆栈上的任何垃圾。
这一行:node * header_2 = malloc(sizeof(node));
将包含对malloc
的调用返回的内容(如果malloc成功将是指向'heap'中某处的指针,如果malloc失败则为NULL)