ブーストマルチインデックスマップコンテナにエントリを挿入中にクラッシュする

Apoorva sahay

アプリケーションのキャッシュをサポートするために、Boostマルチインデックスマップコンテナを使用しています。しかし、挿入中にアプリケーションがクラッシュするのがわかりました。私のコードはこのように見えます

class MultiIndexMap
{
public:
    MultiIndexMap();
    ~MultiIndexMap();

    string  _uid;
    string  _name1;
    string  _name2;
};

/**
 * Tags for accessing corresponding indices
 */
class uid{};
class name1{};
class name2{};

/** 
 *   - a unique index sorted by MultiIndexMap::_uid,
 *   - a non-unique index sorted by MultiIndexMap::name1,
 *   - a non-unique index sorted by MultiIndexMap::name2.
 */

typedef multi_index_container<
    MultiIndexMap, 
    indexed_by< 
    ordered_unique< tag<uid>,  BOOST_MULTI_INDEX_MEMBER(MultiIndexMap,string,_uid)>,
    ordered_non_unique< tag<name1>,BOOST_MULTI_INDEX_MEMBER(MultiIndexMap,string,_name2)>,
    ordered_non_unique< tag<name2>, BOOST_MULTI_INDEX_MEMBER(MultiIndexMap,string,_name2)> > > MultiIndexMap_set;

void Insert(MultiIndexMap_set& s, MultiIndexMap& entry)
{
    MultiIndexMap_set::nth_index<0>::type& uid_index= s.get<0>();
    
    uid_index.insert(entry); <<-- crashing at this line
}

このクラッシュの理由は何でしょうか。

ここに画像の説明を入力してください

これは、アプリケーションで取得している場所とクラッシュです。

見る

私たちはあなたが未定義の振る舞いをしていると仮定しなければなりません。

次のテストは、MSVC(VS2013)、GCC、およびClangで機能します。LiveOnColiru

#if !defined(NDEBUG)
#define BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING
#define BOOST_MULTI_INDEX_ENABLE_SAFE_MODE
#endif

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>

using boost::multi_index_container;
namespace bmi = boost::multi_index;

class MultiIndexMap
{
public:
    MultiIndexMap() {}
    ~MultiIndexMap() {}

    std::string  _uid;
    std::string  _name1;
    std::string  _name2;
};

/**
 * Tags for accessing corresponding indices
 */
class uid{};
class name1{};
class name2{};

/**
 *   - a unique index sorted by MultiIndexMap::_uid,
 *   - a non-unique index sorted by MultiIndexMap::name1,
 *   - a non-unique index sorted by MultiIndexMap::name2.
 */

typedef multi_index_container<
    MultiIndexMap,
    bmi::indexed_by<
        bmi::ordered_unique<bmi::tag<uid>, BOOST_MULTI_INDEX_MEMBER(MultiIndexMap, std::string, _uid)>,
        bmi::ordered_non_unique<bmi::tag<name1>, BOOST_MULTI_INDEX_MEMBER(MultiIndexMap, std::string, _name2)>,
        bmi::ordered_non_unique<bmi::tag<name2>, BOOST_MULTI_INDEX_MEMBER(MultiIndexMap, std::string, _name2)>
    > > MultiIndexMap_set;

void Insert(MultiIndexMap_set& s, MultiIndexMap& entry)
{
    MultiIndexMap_set::nth_index<0>::type& uid_index = s.get<0>();
    uid_index.insert(entry); //<< --crashing at this line
}

int main()
{
    MultiIndexMap_set x;

    MultiIndexMap m;
    m._uid = "uid_1";
    m._name1 = "name1_1";
    m._name2 = "name2_1";
    Insert(x, m);

    m._uid = "uid_2";
    m._name1 = "name1_2";
    m._name2 = "name2_2";
    Insert(x, m);

    m._uid = "uid_3";
    m._name1 = "name1_3";
    m._name2 = "name2_3";
    Insert(x, m);

    for (auto& i : x)
        std::cout << i._uid << "\n";
}

現在、MultiIndexを使用するときに通常未定義の動作をトリガーするのは、コンテナーの不変条件に違反した場合です(たとえば、適切なmodify呼び出しを使用せずにインデックスの一部を変更することによって

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Dockerコンテナのエラーをホストマシンのjenkinsにバブルアップする方法

分類Dev

マージリクエストを行った後、ブランチにプッシュできますか?

分類Dev

ストラクチャーマップコンテナー構成をWebApiスタートアップファイルに追加する方法

分類Dev

std :: unordered_map(マップのマップ)に基づくマルチインデックスコンテナーとマルチレベルマッピングコンテナーのブースト

分類Dev

コンテキストメニューコマンドをクリックするとエクスプローラーがクラッシュする

分類Dev

テーブルレコードの再挿入と自動インクリメントプライマリインデックスの更新

分類Dev

オブジェクトの状態と永続的にインクリメントされるインデックスにアトミックを使用するc ++ 11マルチリーダー/マルチライターキュー

分類Dev

左外部結合、マルチテーブル、クラシックASPアプリケーションのチェックボックスに入力する

分類Dev

コレクション ビュー スクロールをマップキット アノテーションにリンクする方法

分類Dev

マルチタブアクティビティでインテントまたはトーストにsetOnClickLIstenerを使用すると、アプリが起動する前にクラッシュする

分類Dev

このクラスは、SomeModule-> SomeComponentを介してコンシューマに表示されますが、トップレベルのライブラリエントリポイントからエクスポートされません

分類Dev

Git:コードをリモートマスターブランチにプッシュする

分類Dev

Git:コードをリモートマスターブランチにプッシュする

分類Dev

マルチインデックスシリーズをDataFrameにピボット

分類Dev

UbuntuDockerコンテナへのパスにスペースとダッシュがあるWin10ディレクトリをマウントする

分類Dev

コマンド ライン ツールを使用して x2go セッション中にデスクトップを記録する方法は?

分類Dev

Mac AppStoreのosxアプリケーションにコマンドラインユーティリティをバンドルするにはどうすればよいですか(サンドボックスエンタイトルメントを使用)

分類Dev

リモートでマスターブランチへのプッシュをブロックする方法

分類Dev

インデックスによるマルチバイトタイプへのバイトの挿入

分類Dev

クライアントにデータを書き込むときにブーストコルーチンサーバーがクラッシュする

分類Dev

サーバーでコンテンツセキュリティポリシーが有効になっている場合、ブックマークレットを使用してスクリプトをページに挿入するにはどうすればよいですか?

分類Dev

GCPslackチュートリアル 'スラッシュコマンド'; グーグルクラウド機能のデプロイに失敗しました

分類Dev

コマンドラインからクリップボードにテキストをパイプする方法

分類Dev

マルチスレッドアプリケーションコールバックをサポートするLinux共有ライブラリ

分類Dev

ライブラリから@embeddingするときにコンストラクターのマッチング中にエラーが発生しました

分類Dev

ワークステーションにhypervコマンドレットをインストールする

分類Dev

Azureでマルチステップテストを作成するときにエラーが発生するアプリケーションインサイトマルチステップテスト

分類Dev

スナップアクションスイッチ(マイクロスイッチ)が接続されている場合、Minibrick8はRS-232シリアルケーブルを介してコンピューターに接続しません

分類Dev

Linuxディストリビューションのインストール中にクラッシュする

Related 関連記事

  1. 1

    Dockerコンテナのエラーをホストマシンのjenkinsにバブルアップする方法

  2. 2

    マージリクエストを行った後、ブランチにプッシュできますか?

  3. 3

    ストラクチャーマップコンテナー構成をWebApiスタートアップファイルに追加する方法

  4. 4

    std :: unordered_map(マップのマップ)に基づくマルチインデックスコンテナーとマルチレベルマッピングコンテナーのブースト

  5. 5

    コンテキストメニューコマンドをクリックするとエクスプローラーがクラッシュする

  6. 6

    テーブルレコードの再挿入と自動インクリメントプライマリインデックスの更新

  7. 7

    オブジェクトの状態と永続的にインクリメントされるインデックスにアトミックを使用するc ++ 11マルチリーダー/マルチライターキュー

  8. 8

    左外部結合、マルチテーブル、クラシックASPアプリケーションのチェックボックスに入力する

  9. 9

    コレクション ビュー スクロールをマップキット アノテーションにリンクする方法

  10. 10

    マルチタブアクティビティでインテントまたはトーストにsetOnClickLIstenerを使用すると、アプリが起動する前にクラッシュする

  11. 11

    このクラスは、SomeModule-> SomeComponentを介してコンシューマに表示されますが、トップレベルのライブラリエントリポイントからエクスポートされません

  12. 12

    Git:コードをリモートマスターブランチにプッシュする

  13. 13

    Git:コードをリモートマスターブランチにプッシュする

  14. 14

    マルチインデックスシリーズをDataFrameにピボット

  15. 15

    UbuntuDockerコンテナへのパスにスペースとダッシュがあるWin10ディレクトリをマウントする

  16. 16

    コマンド ライン ツールを使用して x2go セッション中にデスクトップを記録する方法は?

  17. 17

    Mac AppStoreのosxアプリケーションにコマンドラインユーティリティをバンドルするにはどうすればよいですか(サンドボックスエンタイトルメントを使用)

  18. 18

    リモートでマスターブランチへのプッシュをブロックする方法

  19. 19

    インデックスによるマルチバイトタイプへのバイトの挿入

  20. 20

    クライアントにデータを書き込むときにブーストコルーチンサーバーがクラッシュする

  21. 21

    サーバーでコンテンツセキュリティポリシーが有効になっている場合、ブックマークレットを使用してスクリプトをページに挿入するにはどうすればよいですか?

  22. 22

    GCPslackチュートリアル 'スラッシュコマンド'; グーグルクラウド機能のデプロイに失敗しました

  23. 23

    コマンドラインからクリップボードにテキストをパイプする方法

  24. 24

    マルチスレッドアプリケーションコールバックをサポートするLinux共有ライブラリ

  25. 25

    ライブラリから@embeddingするときにコンストラクターのマッチング中にエラーが発生しました

  26. 26

    ワークステーションにhypervコマンドレットをインストールする

  27. 27

    Azureでマルチステップテストを作成するときにエラーが発生するアプリケーションインサイトマルチステップテスト

  28. 28

    スナップアクションスイッチ(マイクロスイッチ)が接続されている場合、Minibrick8はRS-232シリアルケーブルを介してコンピューターに接続しません

  29. 29

    Linuxディストリビューションのインストール中にクラッシュする

ホットタグ

アーカイブ