2010-02-23 85 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=="") 
...