Ich habe den folgenden Code:Warum erhalte ich einen Segmentierungsfehler (Core Dump), wenn ich keinen Zeiger meiner Funktion zurückgebe?
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]);
}
}
Und wenn ich es benutze ich erhalte Segmentation fault (core dumped). Wenn ich jedoch add_tree_nodes()
meine Funktion geändert tree_node*
zurück es funktioniert:
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;
}
Meine Frage ist, warum bin ich im ersten Teil des Codes einen Segmentation fault bekommen? Ich dachte, dass, wenn ich einen Zeiger in eine Funktion übergab, die Adresse dieses Blockes des Codes übergeben wurde, also was auch immer ich innerhalb einer Funktion tue, beeinflußt das Ding, auf das der Zeiger zeigt.
Weil C Zeiger durch Wert übergeben. Nach dem Aufruf von 'add_tree_nodes (root, tree_nodes, 8)' wird der 'root' Zeiger in' main() 'nicht geändert. –
@SteveSummit warum wird nicht geändert? Also bedeutet es, dass es immer NULL ist, selbst nachdem die Schleife beendet ist? – lmiguelvargasf
Ja. Siehe die Antworten. Nach 'tree_node * root = NULL; root = add_tree_nodes (root, tree_nodes, 8); ', root ist immer noch NULL. –