c - 段错误和指向不存在结构的指针不为空

标签 c pointers struct

我有以下结构:

typedef struct treeNode *tree;
typedef struct treeNode {
  int key; 
  tree left, right;
} treeNode;

对于这棵树:

my tree

问题: 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() 不会将内存内容初始化为零。您的代码中没有任何内容会将 leftright 指针设置为 NULL。这就是为什么它们不是NULL。您可以手动初始化它们(最适合您),也可以使用 calloc() 而不是 malloc()calloc() 将分配的内存初始化为零。

关于c - 段错误和指向不存在结构的指针不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38382046/

相关文章:

c# - 为什么结构不能包含可为空的循环引用?

c++ - 想要在 C++ 中创建一个存储 Nx3 值的 2D 指针

c - 将特定结构传递给 C 中的函数

我可以这样投指针吗?

c - 在c中将ByteArray写入文件

xml - 在运行时更改结构标记 (xml)

c - 结构有什么特别之处?

c - 变量 在 C 中使用 Fgets 和 char 数组

c - 向前和向后高斯消除 - 并行化?

c - 为函数中的结构分配内存