2012-03-21 11 views
1

マップメンバー変数とクラスデストラクタを持つクラスがあります。以下のコードに示すように、ラッパー関数reset()を呼び出して マップメンバーを削除します。上記z_type_infoとz_type_functionにおいてクラスメンバーマップを削除中にマップデストラクタstl_map.hでクラッシュを取得する

void zreg::reset() 
83 { 
84  s_err = ""; 
85  bad_types = 0; 
86  bad_apis = 0; 
87  b_valid = false; 
88 
89  zt_itr_t it; 
90  while ((it = m_types.begin()) != m_types.end()) { 
91  delete it->second; 
92  m_types.erase(it); 
93  } 
94 
95  zf_itr_t itf; 
96  while ((itf = m_apis.begin()) != m_apis.end()) { 
97  delete itf->second; 
98  m_apis.erase(itf); 
99  } 
100 } 

36 zreg::~zreg() 
37 { 
38  reset(); 
39 } 



class zreg 
210 { 
211 public: 
212  // Construction/destruction 
213  zreg(); 
214  ~zreg(); 
215 
216  typedef std::map<std::string, z_type_info *> zt_map_t; 
217  typedef std::map<std::string, z_type_info *>::iterator zt_itr_t; 
218  typedef std::map<std::string, z_type_info *>::const_iterator zt_citr_t; 
219  typedef std::map<std::string, z_type_function *> zf_map_t; 
220  typedef std::map<std::string, z_type_function *>::iterator zf_itr_t; 
221  typedef std::map<std::string, z_type_function *>::const_iterator zf_citr_t; 
222 

255 private: 
256  size_t bad_types; 
257  size_t bad_apis; 
258  std::string s_err; 
259  std::string s_version; 
260  bool b_valid; 
261 
262  zt_map_t m_types; 
263  zf_map_t m_apis; 

クラス

スタックトレースである: #0のstd ::マップ、スタンダード::アロケータ>、z_type_function *、STD ::以下、スタンダード::アロケータ>> 、std :: allocator、std :: allocator> const、z_type_function *>>> ::〜map(this = 0x8006da400、__in_chrg =) aトンZREGで/x/freebsd/x86_64/stdhdrs_cplus/bits/stl_map.h:94 #1 0x0000000804ea34c2 ::〜ZREG(これ= 0x805158ac0、__in_chrg =)

と呼ばれる最後の関数であることがBTから分かるように〜 zregデストラクタを使用していますが、なぜbtが呼び出されているreset()関数への呼び出しを表示していないのですか?

第2回このクラッシュを再現する方法を再現できません。おそらく私のクラスのコードをzregから取り除くと問題が再現されるでしょうか?

+0

問題は、メンバーを削除するときにiterator itおよびitf incrementをリセット機能で実行していないことです。ヌルチェックが行方不明になることがありますか? – Omprakash

答えて

0

〜map()でリセットした後にクラッシュしたと思います あなたのメモリが他の場所で壊れている可能性があります。

+0

しかし、gdbのバックトレース(bt)では、〜zregデストラクタが呼ばれた後にreset()関数の呼び出しが表示されません。 – Omprakash

関連する問題