如何声明一个新结构

时间:2012-10-06 20:11:07

标签: c binary-tree

我试图通过从文件中读取行来实现二叉搜索树。

  while(fgets(p, 1024, fp))
  {
     struct node child;
     child.str = (char *)malloc(plen);      
     strcpy(child.str,p);
     insert(&tree,&child);
  }

现在的问题是,我似乎无法找到一种方法来创建一个完整的子副本,而只是每次while循环重新启动时它都会更改其值。

3 个答案:

答案 0 :(得分:3)

那是因为指向孩子的指针(&child)没有改变。你可以通过打印来说服自己:

printf("address of child = %p\n", &child);

解决方案:您还需要分配节点:

struct node*child = malloc(sizeof(struct node));

然后您可以按原样分配child.str,现在使用指针语法:

child->str = (char *)malloc(plen);      
strcpy(child->str,p);

...因为孩子是指针,你不需要这里的&符号:

insert(&tree,child);

答案 1 :(得分:3)

很难说没有看到insert()。我的猜测是你的自动struct node在每次迭代时超出了范围。指向此类变量的指针不再有效。

答案 2 :(得分:1)

如果以这种方式定义函数

struct node child;

这是一个临时记忆,因此在退出该功能后,存在丢失数据的风险。所以你必须用malloccalloc

动态定义结构
struct node *child = malloc(sizeof(struct node));

struct node *child = calloc(1,sizeof(struct node));

calloc允许分配内存并将其设置为0