我在为指向结构成员的指针(也是指向结构的指针)分配空值时遇到问题。以下代码正确地将 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))
。您只是为指针分配了足够的空间,而不是整个结构。这会导致以下所有间接通过这些指针的代码出现未定义的行为。
我是一名优秀的程序员,十分优秀!