二进制搜索树在一个奇怪的地方发生故障

时间:2013-11-25 01:23:52

标签: c++ segmentation-fault binary-search-tree

我正在编写一个二叉搜索树来保存我希望按名称排列的歌曲列表。我做通常的递归,使用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));
}
}

1 个答案:

答案 0 :(得分:3)

这一行:

if(curr = NULL) {

您打算使用==。目前,您的代码将curr更改为NULL,然后计算结果为false。因此控制传递给下一个if,它在NULL指针上调用curr->get_title()。结果是在程序到达您输入的任何调试语句之前的段错误。