0

アプリケーションは、文字列方程式を数学に解析し、データをユーザーに返したいと考えています。この目的のために使用されるライブラリは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

4

0 に答える 0