Hello,
I've got a multi_index_container with few indices, as follows:
struct Record
{
// some data
};
typedef mi::multi_index_container<
Record,
mi::indexed_by<
mi::ordered_non_uniqueRecord::stream, mi::member >,
mi::ordered_non_uniqueRecord::setting,
mi::member >
Records;
typedef Records::indexRecord::stream::type RecordsByStream;
typedef Records::indexRecord::setting::type RecordsBySetting;
Records records_;
Then I insert 1 Record into records_. Later in the code I do the
following lookup:
RecordsBySetting bySetting = records_.getRecord::setting();
std::pair sameSetting =
bySetting.equal_range(1); // record with setting id == 1 exists in
the container!
In the last line, in equal_range() I've got an exception (access violation).
Am I doing something wrong?
Any help would be greatly appreciated!
Some tracing:
The crash is in ordered_index::equal_range(const CompatibleKey& x) in
its 1st line:
std::pair p=
ordered_index_equal_range(root(),header(),key,x,comp);
An attepmt to access the root() fails.
Here is the call stack:
SomeProg.exe!boost::multi_index::detail::ordered_index_node_compressed_base
::parent_ref::operator
boost::multi_index::detail::ordered_index_node_impl,std::less<int>,boost::multi_index::detail::nth_layer<2,Record,boost::multi_index::indexed_byRecord::streamable,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::...,boost::multi_index::member,boost::mpl::na>,boost::multi_index::ordered_non_uniqueRecord::setting,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,...,boost::multi_index::member,boost::mpl::na>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<Record>
,boost::mpl::vector1Record::setting,boost::multi_index::detail::ordered_non_unique_tag>::root()
Line 879 + 0x40 bytes C++
SomeProg.exe!boost::multi_index::detail::ordered_index,std::less<int>,boost::multi_index::detail::nth_layer<2,Record,boost::multi_index::indexed_byRecord::streamable,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::...,boost::multi_index::member,boost::mpl::na>,boost::multi_index::ordered_non_uniqueRecord::setting,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,...,boost::multi_index::member,boost::mpl::na>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<Record>
,boost::mpl::vector1Record::setting,boost::multi_index::detail::ordered_non_unique_tag>::equal_range<int>(const
int & x=1) Line 493 + 0x20 bytes C++