c - 将节点添加到字符串的 BST

标签 c segmentation-fault binary-search-tree

这是学校作业。当我尝试向 BST 添加新节点时,出现段错误。我认为这可能与我分配内存的方式有关,但我不知道如何解决这个问题。

结构代码:

struct tnode {
  char* data;
  struct tnode* left;
  struct tnode* right;
};

typedef struct tnode Tnode;

添加节点功能:

Tnode* add_tnode(Tnode* current_tnode, char* value) {
  if (current_tnode == NULL) {
    malloc(sizeof(Tnode));
    current_tnode->data = value;
    current_tnode->left = NULL;
    current_tnode->right = NULL;
    return current_tnode;
      }
  else {
    if (strcmp(current_tnode->data, value) <= 0) {
      add_tnode(current_tnode->left, value);
      return current_tnode->left;
      }
    else {
      add_tnode(current_tnode->right, value);
      return current_tnode->right;
      }
  }
}

测试功能的主程序:

int main() {
  Tnode* new_node =  (Tnode*)malloc(sizeof(Tnode));
  char* data1 = "Hello";
  char* data2 = "Goodbye";
  char* data3 = "Hi";
  char* data4 = "Bye";
  char* data5 = "Hey";

  add_tnode(new_node, data1);
  add_tnode(new_node, data2);
  add_tnode(new_node, data3);
  add_tnode(new_node, data4);
  add_tnode(new_node, data5);

  return 0;
}    

这是我在回溯段错误时收到的错误:

#0  0x0000003458478350 in strcmp () from /lib64/libc.so.6
#1  0x00000000004005be in add_tnode (current_tnode=0x601010, 
    value=0x400708 "Hello") at tree.c:16
#2  0x0000000000400523 in main () at treetest.c:12

我认为当 strcmp() 尝试查找存储在节点中的字符串时,它找不到它。任何帮助或提示将不胜感激!

最佳答案

另一个问题:

add_tnode 返回新分配的节点的地址,但您从未使用过它。

关于c - 将节点添加到字符串的 BST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14926492/

相关文章:

swift - 二叉搜索树中节点的后继 - Swift

c - G-wan xbuf_xcat(),难道是内存泄露?

java - 将一串 1's and 0' 写入二进制文件?

c - pthread_spin_trylock 在多线程应用程序的 sigsegv 处理程序中是否安全?

java - 删除二叉搜索树中的节点

python - 创建 BST : python 的最佳实践

C:从文件中读取int并将其存储在指针数组中

c - 带有制表符和换行符的 scanf 缓冲

c - 协程恢复上的 Lua 段错误

c - 为什么我的代码中出现段错误,您能解释一下按引用传递和按值传递吗?