我试图通过这样做来初始化树:
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);
}
但是我遇到了分段错误。为什么会这样?我传递一个指向函数的指针,我在其中保留内存。这是错的吗?
答案 0 :(得分:2)
指针'my_tree'按值传递(这是在C中完成的唯一方式)
所以my_tree基本上是COPIED,并且“root”的赋值对'my_tree'变量没有任何影响。
你想得到一个指针,所以传递一个指向指针(**)然后init * 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);
}