0

我正在尝试通过这样做来初始化一棵树:

typedef struct {
    char *value;
    struct children_list *children;
} tree;

typedef struct t_children_list {
    tree *child;
    struct t_children_list *next;
} children_list;

void initializeTree(tree *root, char *input)
{
  if((root = malloc(sizeof(tree))) == NULL) { abort(); }
  root->value = input;
}

void main()
{
  // Create the tree
  char *input = "aaaaaa";
  tree *my_tree = NULL;

  initializeTree(my_tree, input);
}

但是我遇到了分段错误。为什么会这样?我正在传递一个指向函数的指针,并在其中保留内存。那是错的吗?

4

1 回答 1

2

指针“my_tree”按值传递(这是在 C 中完成的唯一方法)

所以 my_tree 基本上是复制的,并且没有分配 'root' 对 'my_tree' 变量有任何影响。

你想得到一个指针,所以将一个指针传递给一个指针(**),然后初始化 *root 来实际修改我的树

void initializeTree(tree **pRoot, char *input)
{
  if((*pRoot = malloc(sizeof(tree))) == NULL) { abort(); }
  *pRroot->value = input;
}

void main()
{
  // Create the tree
  char *input = "aaaaaa";
  tree *my_tree = NULL;

  initializeTree(&my_tree, input);
}

或者根本不通过它,而是返回它:

tree *initializeTree(char *input)
{
  tree *root = NULL;
  if((root = malloc(sizeof(tree))) == NULL) { abort(); }
  root->value = input;
  return root;
}

void main()
{
  // Create the tree
  char *input = "aaaaaa";
  tree *my_tree = initializeTree(input);
}
于 2013-02-23T15:56:12.407 回答