From 196d2d563f6012d060628752f9cc456610bd8f5d Mon Sep 17 00:00:00 2001 From: gwdwyy Date: Sun, 21 Jul 2013 10:18:43 +0800 Subject: [PATCH] fix dispose bug in trie.cpp --- src/Segment.cpp | 42 +++++++++++++----------------------------- src/Segment.h | 2 +- src/Trie.cpp | 42 ++++++++++++++++++------------------------ src/Trie.h | 7 +++---- 4 files changed, 35 insertions(+), 58 deletions(-) diff --git a/src/Segment.cpp b/src/Segment.cpp index e2344dc..9f7ca59 100644 --- a/src/Segment.cpp +++ b/src/Segment.cpp @@ -35,9 +35,9 @@ namespace CppJieba } - bool Segment::destroy() + bool Segment::dispose() { - return _trie.destroy(); + return _trie.dispose(); } bool Segment::cutDAG(const string& str, vector& res) @@ -207,36 +207,20 @@ int main() cerr<<"1"< res; - string title; - title = "我来到北京清华大学"; - res.clear(); - segment.cutDAG(title, res); - PRINT_VECTOR(res); - getchar(); - - title = "特价!camel骆驼 柔软舒适头层牛皮平底凉鞋女 休闲平跟妈妈鞋夏"; - res.clear(); - segment.cutDAG(title, res); - PRINT_VECTOR(res); - getchar(); + string line; + while(getline(ifile, line)) + { + res.clear(); + segment.cutDAG(line, res); + PRINT_VECTOR(res); + getchar(); + } + cout<<__FILE__<<__LINE__<& res); double getUtf8WordWeight(const string& word); diff --git a/src/Trie.cpp b/src/Trie.cpp index 04148ad..e159131 100644 --- a/src/Trie.cpp +++ b/src/Trie.cpp @@ -35,7 +35,7 @@ namespace CppJieba Trie::~Trie() { - destroy(); + dispose(); } bool Trie::setEncoding(const string& enc) @@ -53,14 +53,14 @@ namespace CppJieba { return _initFlag; } - void Trie::_setInitFlag() + void Trie::_setInitFlag(bool on) { - _initFlag = true; + _initFlag = on; } bool Trie::init() { - if(!_getInitFlag()) + if(_getInitFlag()) { LogError("already initted!"); return false; @@ -78,7 +78,7 @@ namespace CppJieba { return false; } - _setInitFlag(); + _setInitFlag(true); return true; } @@ -155,29 +155,23 @@ namespace CppJieba return true; } - bool Trie::destroy() + bool Trie::dispose() { if(!_getInitFlag()) { return false; } - else - { - bool ret = _destroyNode(_root); - _root = NULL; - return ret; - } - _nodeInfoVec.clear(); - } - - void Trie::display() - { - for(uint i = 0; i < _nodeInfoVec.size(); i++) + bool ret = _deleteNode(_root); + if(!ret) { - cout<<_nodeInfoVec[i].word<<"," - <<_nodeInfoVec[i].count<<"," - <hmap.begin(); it != node->hmap.end(); it++) { TrieNode* next = it->second; - _destroyNode(next); + _deleteNode(next); } delete node; @@ -454,7 +448,7 @@ int main() trie.loadDict("../dicts/segdict.utf8.v2.1"); cout<