[ Thrash3d @ 14.01.2013. 11:35 ] @
Pozdrav, Novi sam u C++, imam zadatak da napravim stablo za unos i brzu pretragu podataka. Ali, imam problema sa dealokacijom, kompajler mi daje gresku u funkciji destroy_tree: glibc detected. Takodjer, kako cu obrisati zone_id? Moze li mi neko pomoci? Ovo je moj kod: Tree.h Code (cpp): #ifndef TREE_H #define TREE_H #define NUM_ELEMS 74 #include <string> struct node { int* zone_id; node* leaves [NUM_ELEMS]; node() : leaves() {}; }; class Tree { public: Tree(); ~Tree(); void insert (std::string, int); void destroy_tree(); int* search_tree (std::string); private: void insert (std::string, node**, int, int); void destroy_tree (node*); int* search (std::string, node**, int); node* root; }; Tree.cpp Code (cpp): #include "Tree.h" #include <iostream> using namespace std; Tree::Tree() { root = NULL; } Tree::~Tree() { destroy_tree(); } void Tree::destroy_tree() { destroy_tree(root); } void Tree::destroy_tree(node* parent) { if ( parent != NULL ) { for (int i=0; i<NUM_ELEMS; i++) { destroy_tree( parent->leaves[i] ); } delete parent; } } void Tree::insert(string str, int zone_id) { int num=0; if (root != NULL) insert (str, &root, num, zone_id); else { root = new node; insert (str, &root, num, zone_id); } } void Tree::insert(string str, node** parent, int num, int zone_id) { int value; if (num < str.length()) { value = (int)str[num] - 48; if ((*parent)->leaves[value] != NULL) insert (str, &((*parent)->leaves[value]), num+1, zone_id); else { (*parent)->leaves[value] = new node; if (num == str.length() -1) { (*parent)->leaves[value]->zone_id = new int; *((*parent)->leaves[value]->zone_id) = zone_id; } else { insert (str, &((*parent)->leaves[value]), num+1, zone_id); } } } } int* Tree::search_tree (string str) { int num = 0; return search (str, &root, num); } int* Tree::search(string str, node** parent, int num) { int value; if (num < str.length()) { value = (int)str[num] - 48; if ((*parent)->leaves[value] != NULL && num != str.length() -1) { return search (str, &((*parent)->leaves[value]), num+1); } else if (num == str.length() -1 && (*parent)->leaves[value] != NULL) { if ( (*parent)->leaves[value]->zone_id != NULL ) return (*parent)->leaves[value]->zone_id; else return NULL; } else return NULL; } else return NULL; } Hvala! [Ovu poruku je menjao Thrash3d dana 14.01.2013. u 13:22 GMT+1] [Ovu poruku je menjao Thrash3d dana 14.01.2013. u 13:23 GMT+1] |