アプリケーションは、文字列方程式を数学に解析し、データをユーザーに返したいと考えています。この目的のために使用されるライブラリはexprtk です
簡単に分析できるように、最小限の作業コードを共有しました 最小限の 作業コード
アプリケーションが文字列を解析して背中合わせにコード化するとき[マルチスレッドだがロックされている]
void reset()
{
// Why? because msvc doesn't support swap properly.
//stack_ = std::stack<std::pair<char,std::size_t> >();
/**
it was crashing on destructor on ~deque()
stating memory reallocation
so I change it to pop so for now this has been resolved
*/
while(stack_.size()) stack_.pop();
state_ = true;
error_token_.clear();
}
今、コードは常にクラッシュします
static inline void destroy(control_block*& cntrl_blck)
{
if (cntrl_blck)
{
/**now crashes on this condition check*/
if ( (0 != cntrl_blck->ref_count) && (0 == --cntrl_blck->ref_count) )
{
delete cntrl_blck;
}
cntrl_blck = 0;
}
}
ペーストビン コードの更新メインの新しいコードが更新され、メインと最小限の作業コードが追加されました。がすべてshared_ptr
削除されました。現在、それらは通常のオブジェクトです。exprtkに関しては、リセット機能が元のものに変更されました
void reset()
{
// Why? because msvc doesn't support swap properly.
stack_ = std::stack<std::pair<char,std::size_t> >();
state_ = true;
error_token_.clear();
}
gdb のバックトレースが追加されましたbacktrace