我有以下结构:
typedef struct treeNode *tree;
typedef struct treeNode {
int key;
tree left, right;
} treeNode;
对于这棵树:
问题: mytree->左->左->左不为空。但为什么?!如何检查我是否到达了分支的末尾?
tree mytree = (tree)malloc(sizeof(treeNode));
mytree->key = 17;
mytree->left = (tree)malloc(sizeof(treeNode));
mytree->left->key = 5;
mytree->left->left = (tree)malloc(sizeof(treeNode));
mytree->left->right = (tree)malloc(sizeof(treeNode));
mytree->left->left->key = 20;
mytree->left->right->key = 2;
mytree->right = (tree)malloc(sizeof(treeNode));
mytree->right->key = 1;
mytree->right->left = (tree)malloc(sizeof(treeNode));
mytree->right->right = (tree)malloc(sizeof(treeNode));
mytree->right->left->key = 6;
mytree->right->right->key = 3;
最佳答案
当你分配一个treeNode时,你是否将指针初始化为NULL? C 不会神奇地初始化动态分配的内存。
您添加了初始化代码。 malloc()
不会将内存内容初始化为零。您的代码中没有任何内容会将 left
和 right
指针设置为 NULL
。这就是为什么它们不是NULL
。您可以手动初始化它们(最适合您),也可以使用 calloc()
而不是 malloc()
。 calloc()
将分配的内存初始化为零。
关于c - 段错误和指向不存在结构的指针不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38382046/