作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 C 构建一棵树,但我的 addNode()
函数出现段错误。
我怀疑这是因为我将一个子元素分配给了 NULL 指针,但情况似乎并非如此。
//This is the tree node struct.
struct NODE {
int value;
struct NODE* child_list;
struct NODE* right_sibling;
struct NODE* parent;
};
//This function adds a node to an element in the tree with a value equal to parent value.
struct NODE* addNode (struct NODE* existing, int parentVal, int childVal) {
struct NODE* child = existing;
struct NODE* child_right = child->right_sibling;
while (child != NULL) {
if (child->value == parentVal) {
struct NODE* new = malloc(sizeof(struct NODE));
new->value = childVal;
new->parent = child;
new->right_sibling = child->child_list;
child->child_list = new;
break;
}
while (child_right != NULL) {
if (child_right->value == parentVal) {
struct NODE* new_sibling = malloc(sizeof(struct NODE));
new_sibling->value = childVal;
new_sibling->parent = child_right;
new_sibling->right_sibling = child->child_list;
child_right->child_list = new_sibling;
break;
}
child_right = child_right->right_sibling;
}
child = child->child_list;
}
return existing;
}
//Here is the implementation of the function that I used to test the function.
int main () {
struct NODE* root = malloc(sizeof(struct NODE));
root->value = 100;
root->child_list = NULL;
root->right_sibling = NULL;
root->parent = NULL;
root = addNode(root, 100, 7);
root = addNode(root, 100, 10);
root = addNode(root, 100, 15);
root = addNode(root, 7, 30);
root = addNode(root, 15, 20);
root = addNode(root, 15, 37);
printTree(root);
return 0;
}
程序应该打印一棵具有正确子级的树,但我在运行代码时收到了段错误。
最佳答案
很明显,在创建新节点时,我没有在 while 循环中将 child_list 设置为 NULL。感谢Retired Ninja提出解决方案!
关于c - 为什么我会收到这段代码的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56160331/
我是一名优秀的程序员,十分优秀!