我正在编写一个二叉搜索树来保存我希望按名称排列的歌曲列表。我做通常的递归,使用strcmp来比较树的当前节点的标题(歌曲是节点)和要添加的歌曲的标题。当代码到达我的Song的get_title函数时,代码就是seg faulting,它只返回一个char *。我可能在这里遗漏了一些明显的东西,但我很难过。我试图修复它没有产生任何结果。也许你可以帮助我。我的二叉搜索树代码如下:
#include "BSTree.h"
BSTree::BSTree() {
next = NULL;
root = NULL;
}
BSTree::BSTree(const BSTree& src) {
next = src.next;
root = src.root;
}
BSTree::~BSTree() {
next = NULL;
root = NULL;
}
void BSTree::add(Song& s) {
root = add_r(root, s);
}
Song* BSTree::add_r(Song* curr, Song& song) {
if(curr = NULL) {
Song* temp = new Song(song);
curr = temp;
cout << "added a new song" << endl;
return curr;
} else if(strcmp(song.get_title(), curr->get_title()) <= 0) {
cout << "went left" << endl;
curr->set_left(add_r(curr->get_left(), song));
} else {
cout << "went right" << endl;
curr->set_right(add_r(curr->get_right(), song));
}
}
答案 0 :(得分:3)
这一行:
if(curr = NULL) {
您打算使用==
。目前,您的代码将curr
更改为NULL,然后计算结果为false
。因此控制传递给下一个if
,它在NULL指针上调用curr->get_title()
。结果是在程序到达您输入的任何调试语句之前的段错误。