gpt4 book ai didi

c - 导致段错误的结构

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:58 25 4
gpt4 key购买 nike

我无法解决这个错误。我在 C 中实现了一个红黑树,但在特定位置遇到了段错误(第 29 行)

 TNODE *tree_add(TNODE *root, const KEY k, const VALUE v) {
LNODE *lnode = NULL;
if (root == NULL) {
TNODE *node = talloc(k);
lnode = lalloc(v);
node->head = lnode;
node->tail = lnode;
node->is_red = true;
return node;
}
if (strcmp(k, root->key) < 0) {
root->left = tree_add(root->left, k, v);
} else if (strcmp(k, root->key) > 0) {
root->right = tree_add(root->right, k, v);
} else {
if (strcmp(k, root->key) == 0) {
lnode = lalloc(v);
root->tail->next = lnode;
root->tail = lnode;
root->tail->next = NULL;
}
}
if (is_red(root->right) && !is_red(root->left)) { //is_red seg faulting
root = rotate_left(root);
}
if (is_red(root->left) && is_red(root->left->left)) {
root = rotate_right(root);
}
if (is_red(root->left) && is_red(root->right)) {
flip_colors(root);
}
return root;

}

这是 is_red 函数:

bool is_red(const TNODE *h) { 
bool is_red = h->is_red;
return is_red;

在执行最后三个 if 语句将 BST 转换为 RB 树之前,代码运行良好。奇怪的是,当我调试 is_red 时,变量 is_red 出现为 true。所以这意味着我没有访问受限内存。但是,当我从 is_red 函数返回到 tree_add 时,我立即遇到段错误。

为了进一步说明,这里是 TNODE 结构:

 typedef struct tnode {
KEY key; // Search key for this binary search tree node.
struct tnode *right; // Right child.
struct tnode *left; // Left child.

LNODE *head; // Head of the linked list storing the values for the search key.
LNODE *tail; // Tail of the linked list storing the values for the search key.

bool is_red; // Flag use only in red-black trees to denote redness.
} TNODE;

最佳答案

在进行 IS_RED 检查之前,您想确保右 child 和左 child 都存在:替换

if (is_red(root->right) && !is_red(root->left)) //is_red is giving me seg fault

if (root->right && is_red(root->right) && root->left && !is_red(root->left)) 

其他地方也请做类似检查。

关于c - 导致段错误的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26665225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com