BST विभाजन गलती मिलती रहती है

वोट
3

संपादित करें: इसे चलाने के माध्यम से gdb देता है

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400e4c in Tree::findKey(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, Tree::Node*) ()

मेरी पहली BST कोड के साथ कुछ मदद की जरूरत है, मैं एक विभाजन गलती बार मिलती है, मुझे लगता है कि है कि यह एक स्मृति रिसाव है? यदि ऐसा है तो मुझे नहीं पता है, जहां / यहाँ ठीक करने के लिए कैसे कोड मुझे लगता है कि है कि समस्या का कारण बन रहे हैं। यह इसलिए है क्योंकि मैं न एक प्रति निर्माता अभी तक सेट है ??

tree.cpp फ़ाइल

Tree::Tree()
{
  root = NULL;
}

bool Tree::insert(int k, string s)
{
  return insert(root, k, s);
}
//HELPER Call find data with key function
bool Tree::findKey(string& s, int k)
{
    return findKey(s, k, root);
}
bool Tree::insert(Node*& currentRoot, int k, string s)
{
  if(currentRoot == NULL){
    currentRoot = new Node;
    currentRoot->key = k;
    currentRoot->data = s;
    currentRoot->left = NULL;
    currentRoot->right = NULL;
    return true;
  }
  else if (currentRoot->key == k)
    return false;
  else if (currentRoot->key > k)
    return insert(currentRoot->left, k, s);
  else
    return insert (currentRoot->right,k, s);
}
bool Tree::findKey(string& s, int k, Node* currentRoot)
{
    if (currentRoot->key == k){
        s = root->data;
        return true;
    }
    else if (root->key < k)
        return findKey (s, k, root->right);
    else if (root->key > k)
        return findKey (s, k, root->left);
    else
        return false;
}

main.cpp

int main()
{
string sout;
  Tree test;
    test.insert(1, a);
    test.insert(2, b);
    test.insert(3, c);
    test.findKey(sout, 3);
    cout<<sout<<endl;
  return 0;
}
27/04/2011 को 14:09
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
2

मैं कुछ संभव segfault देख whenn मैं अपने विधि को देखो। बस किनारे मामलों के बारे में सोच।

यहाँ क्या हुआ?:

Tree test; 
test.findKey(sout, 3);

या

Tree test;
test.insert(1, "a");
test.findKey(sout, 3);

इन मामलों को ठीक करें और आगे बढ़ें।

27/04/2011 को 14:19
का स्रोत उपयोगकर्ता

वोट
2

bool Tree::findKey(string& s, int k, Node* currentRoot)
{
    if (currentRoot->key == k){
        s = root->data;
        return true;
    }
    else if (root->key < k)
        return findKey (s, k, root->right);
    else if (root->key > k)
        return findKey (s, k, root->left);
    else
        return false;
}

तुम हमेशा उपयोग कर रहे हैं rootके बजाय currentRootहै, तो आप वास्तव में पेड़ के नीचे उतरना नहीं है और कुछ बिंदु पर एक stackoverflow मिल जाएगा। इसके अलावा, आप अगर चेक भूल रहे currentRootहै NULL, क्योंकि अगर आप यह तो का उपयोग, आप एक अच्छे segfault मिलेगा (यह क्या मतलब @tgmath है)।

bool Tree::findKey(string& s, int k, Node* currentRoot)
{
    if(currentRoot == NULL)
        return false;
    // as before ...
}
27/04/2011 को 14:24
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more