2010-02-23 47 views
3

我试图建立在C后缀树++作为基因测序在C++构建后缀树

void Tree::insert(string ins) 
{ 
    Node* iterator = chooseBranch(root, ins.at(0)); 
    string temp; 
    for(int i=0; i<100; i++) 
    { 
     if(iterator->data=="") 
. 
. 
. 

chooseBranch()的任务的一部分是选择去这4个孩子的功能,我试图检查这个节点是否已经存在。我的节点类:

struct Node{ 
    Node(); 
    string data; 
    Node* A; 
    Node* G; 
    Node* C; 
    Node* T; 
}; 

这个if语句是给我一个段错误,我用gdb回溯到:

#0 0x0000003ce249bbd6 in std::string::compare() from /usr/lib64/libstdc++.so.6 
#1 0x000000000040185b in std::operator==<char, std::char_traits<char>, std::allocator<char> >() 
#2 0x0000000000401305 in Tree::insert() 
#3 0x00000000004016d4 in Tree::Tree() 
#4 0x00000000004010a2 in main() 

有什么不对这种形式NULL检查的/是怎么回事我能检查节点是否没有数据?

+0

酷。 Farach? Ukkonen? – 2010-02-23 03:11:29

+0

它看起来并不像是在检查NULL - 你只是取消指针“迭代器”。也许修改你的if语句为“if(iterator && iterator-> data.empty())”。顺便说一句,你的输入字符串“ins”可能是空的,在这种情况下ins.at(0)会抛出一个异常。 – 2010-02-23 03:20:02

+0

为什么不使用这个http://code.google.com/p/patl – 2010-02-23 03:22:13

回答

2

看起来好像你根本看不到NULL的指针iterator,你只是取消引用它(如果它是NULL,将导致戏剧性)。

这里有一个样品试用,随用随取的NULL吊出的for循环:


void Tree::insert(string ins) 
{ 
    Node* iterator = chooseBranch(root, ins.at(0)); 
    if (iterator) 
    { 
     string temp; 
     for(int i=0; idata=="") 
...