【发布时间】:2015-03-17 04:41:41
【问题描述】:
我正在尝试在 c 中实现二叉搜索树。我使用 lldb 来跟踪我的代码,我发现当函数 PUT 返回时,它返回一个 key = 5 和 value = 9 的节点指针,并将它分配给 main 中的节点指针 P。
但是,当我将它传递给 tree_walk 函数并尝试打印出所有内容时,它给了我一个分段错误。谁能告诉我的代码有什么问题。谢谢
typedef struct Node{
int key;
int value;
int size;
struct Node *left;
struct Node *right;
}Node;
Node* put(Node **node, int k, int val){
if(*node == NULL){
Node *newNode = (Node *)malloc(sizeof(Node*));
newNode->key = k;
newNode->value = val;
return newNode;
}else if((*node)-> key == k){
(*node)->value = val;
}else{
int cmp = k > ((*node)->key) ? 1 : 0;
Node **ptr = NULL;
if(cmp == 1){
ptr = &((*node)->right);
(*node)->right = put(ptr, k, val);
}else{
ptr = &((*node)->left);
(*node)->left = put(ptr, k ,val);
}
}
(*node)->size = size((*node)->left) + size((*node)->right) + 1;
return *node;
}
int main(void){
Node *p = NULL;
p = put(&p, 5,9);
tree_walk(p);
}
【问题讨论】:
-
put永远不会改变*node所以它会使代码更简单地改变它以采用Node *node -
你错过了
#include <stdlib.h> -
我已经包含了所有的库我只是没有在这里显示它
-
@MattMcNabb 不只是使用指针给我分段错误?因为我正在操作一个指针,所以我需要将一个指针传递给指针。
-
你不是在操作指针,你只是改变它指向的东西
标签: c pointers binary-search-tree