我有以下代码:当我不返回函数的指针时,为什么会出现分段错误(核心转储)?
void add_tree_nodes(tree_node* root, int nodes[], int size);
int main()
{
int tree_nodes[] = {3, 1, 0, 2, 8, 6, 5, 9};
tree_node* root = NULL;
add_tree_nodes(root, tree_nodes, 8);
printf("%d\n", root->data);
printf("%d\n", root->left->data);
printf("%d\n", root->right->data);
return 0;
}
void add_tree_nodes(tree_node* root, int nodes[], int size)
{
for (int i = 0; i < size; i++) {
root = add_tree_node(root, nodes[i]);
}
}
当我运行它,我得到分割故障(核心转储)。不过,如果我改变了我的功能add_tree_nodes()
返回tree_node*
它正常工作:
tree_node* add_tree_nodes(tree_node* root, int nodes[], int size);
int main()
{
int tree_nodes[] = {3, 1, 0, 2, 8, 6, 5, 9};
tree_node* root = NULL;
root = add_tree_nodes(root, tree_nodes, 8);
printf("%d\n", root->data);
printf("%d\n", root->left->data);
printf("%d\n", root->right->data);
return 0;
}
tree_node* add_tree_nodes(tree_node* root, int nodes[], int size)
{
for (int i = 0; i < size; i++) {
root = add_tree_node(root, nodes[i]);
}
return root;
}
我的问题是,为什么我收到分段故障在第一段代码?我认为,当我将一个指针传递给一个函数时,该代码块的地址就被传递了,所以无论我在函数内部做什么都会影响指针指向的东西。
因为C按值传递指针。在调用'add_tree_nodes(root,tree_nodes,8)'后,'main()'中的'root'指针不会改变。 –
@SteveSummit为什么不改变?那么,这意味着即使在循环终止之后它始终为NULL。 – lmiguelvargasf
是的。看到答案。在'tree_node * root = NULL; root = add_tree_nodes(root,tree_nodes,8);',root仍然是NULL。 –