-1

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

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

现在的问题是我似乎无法找到一种方法来制作一个全新的 child 副本,而是在每次 while 循环重新启动时更改它的值。

4

3 回答 3

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);
于 2012-10-06T20:14:54.057 回答
3

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

于 2012-10-06T20:14:55.150 回答
1

如果你以这种方式定义成一个函数

struct node child;

这是一个临时内存,因此在退出该功能后,您可能会丢失数据。所以你必须用mallocor动态定义结构calloc

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

或者

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

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

于 2012-10-06T20:21:36.923 回答