【发布时间】:2020-02-18 08:32:42
【问题描述】:
我有以下sn-ps的代码:
struct TreeNode *allocate_node(char *value) {
struct TreeNode *new_node = malloc(sizeof(struct TreeNode));
new_node->value = value;
new_node->sibling = NULL;
new_node->child = NULL;
return new_node;
}
void tree_insert(struct TreeNode *root, char **values) {
struct TreeNode *prev = root;
struct TreeNode *curr = prev->child;
for (int i = 0; i < 4; i++) {
if (!curr) {
prev->child = allocate_node(values[i]);
prev = prev->child;
curr = prev->child;
}
}
}
int main(void) {
struct TreeNode root;
root.value = "";
root.child = NULL;
root.sibling = NULL;
char *command1[] = {"a", "b", "c", "d"};
char *command2[] = {"e", "f", "g", "h"};
tree_insert(&root, command1);
tree_insert(&root, command2);
printf("Printing current tree values: \n");
struct TreeNode *curr = root.child;
while (curr) {
printf("%s ", curr->value);
curr = curr->child;
}
}
预期输出:
Current tree values:
a b c d
实际输出:
Current tree values:
e f g h
运行第一个 tree_insert 后,我的树的链接如下: (根) -> a -> b -> c -> d
但是当第二个 tree_insert 运行时,我的旧树似乎已被替换,即使 tree_insert 甚至不应该运行。新树是这样的: (根) -> e -> f -> g -> h
既然在第二个 tree_insert 中,curr 不再是 NULL,为什么它还在运行并覆盖我的树?我对 C 很陌生,所以我可能会遗漏一些非常明显的东西
编辑: TreeNode 是这样定义的:
struct TreeNode {
char *value;
struct TreeNode *sibling;
struct TreeNode *child;
};
【问题讨论】:
-
C 还是 C++? TreeNode又是如何定义的?
-
另外,你说链表的样子。你怎么知道的?我在您的代码中没有看到任何打印输出。
-
您应该创建一个minimal reproducible example 并说明预期和实际行为。
-
用最少的打印输出编辑您的主要功能以显示问题。告诉我们它打印了什么。告诉我们您希望它打印什么。
-
@Jesse ideone.com/KqEkMV
标签: c