gpt4 book ai didi

c - 将 struct 指针类型的 struct 成员初始化为 null

转载 作者:太空宇宙 更新时间:2023-11-04 05:22:46 25 4
gpt4 key购买 nike

我在为指向结构成员的指针(也是指向结构的指针)分配空值时遇到问题。以下代码正确地将 headNode->right 变量设置为 null,但不是 headNode->left 变量。

typedef struct node {
char *key;
int frequency;
struct node *left;
struct node *right;
struct node *parent;
} node;


void addKey(char key[]) {
extern node *headNode;
node *newNode;

if (headNode != NULL) {
printf("Head node is initialized\n");
if (headNode->left != NULL) printf(" Left is not null\n");
if (headNode->right != NULL) printf(" Right is not null\n");
}


newNode = malloc(sizeof(node*));
newNode->key = malloc(sizeof(char) * (strlen(key) + 1));
newNode->left = malloc(sizeof(node*));
newNode->right = malloc(sizeof(node*));
newNode->parent = malloc(sizeof(node*));


newNode->left = newNode->right = NULL;
newNode->frequency = 1;
newNode->right = NULL;
strcpy(newNode->key, key);

// If this is the first node, assign it as the root
if (headNode == NULL) {
newNode->parent = NULL;
headNode = newNode;
return;
}
}

但是,如果我在 return 语句之前添加以下两行,它就可以正常工作。

if (headNode->left == NULL) printf("L is null\n");
else printf("L is NOT null\n");

我不明白 if 语句有何不同。在我的代码中,没有任何其他地方可以分配或更改此变量的值。

最佳答案

所有的malloc(sizeof(node*)) 应该是malloc(sizeof(node))。您只是为指针分配了足够的空间,而不是整个结构。这会导致以下所有间接通过这些指针的代码出现未定义的行为。

关于c - 将 struct 指针类型的 struct 成员初始化为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53466525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com