来自dll的deallocate会导致崩溃

时间:2017-07-19 16:55:32

标签: c++ memory-management dll

我已经构建了一个DLL以及pdb符号,以便我可以浏览代码。我有一个签名方法如下:

void A::b(
    const std::map<std::string, int>    &map,
    const std::vector<std::string>      &names,
    std::shared_ptr<data>       data_in,
    const std::map<int32, int32>        index_map_in

它运行良好到最后,但当它开始释放局部变量时,它会遇到问题。特别是当它试图解除分配index_map_in时。

    ntdll.dll!00007ffdef5b771e()    Unknown
    ntdll.dll!00007ffdef5bdf0a()    Unknown
    ntdll.dll!00007ffdef564f22()    Unknown
    ntdll.dll!00007ffdef579024()    Unknown
    ucrtbase.dll!00007ffdebc3c97b() Unknown
    my.dll!std::_Deallocate(void * _Ptr, unsigned __int64 _Count, unsigned __int64 _Sz) Line 133    C++
    my.dll!std::allocator<std::_Tree_node<std::pair<int const ,int>,void * __ptr64> >::deallocate(std::_Tree_node<std::pair<int const ,int>,void *> * _Ptr, unsigned __int64 _Count) Line 721   C++
    my.dll!std::_Wrap_alloc<std::allocator<std::_Tree_node<std::pair<int const ,int>,void * __ptr64> > >::deallocate(std::_Tree_node<std::pair<int const ,int>,void *> * _Ptr, unsigned __int64 _Count) Line 988    C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Erase(std::_Tree_node<std::pair<int const ,int>,void *> * _Rootnode) Line 2042 C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Erase(std::_Tree_node<std::pair<int const ,int>,void *> * _Rootnode) Line 2037 C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Erase(std::_Tree_node<std::pair<int const ,int>,void *> * _Rootnode) Line 2037 C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Erase(std::_Tree_node<std::pair<int const ,int>,void *> * _Rootnode) Line 2037 C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Erase(std::_Tree_node<std::pair<int const ,int>,void *> * _Rootnode) Line 2037 C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Erase(std::_Tree_node<std::pair<int const ,int>,void *> * _Rootnode) Line 2037 C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Erase(std::_Tree_node<std::pair<int const ,int>,void *> * _Rootnode) Line 2037 C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Erase(std::_Tree_node<std::pair<int const ,int>,void *> * _Rootnode) Line 2037 C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Erase(std::_Tree_node<std::pair<int const ,int>,void *> * _Rootnode) Line 2037 C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Erase(std::_Tree_node<std::pair<int const ,int>,void *> * _Rootnode) Line 2037 C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::clear() Line 1472   C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::erase(std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<int const ,int> > > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<int const ,int> > > > _Last) Line 1448    C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Tidy() Line 2169   C++
    my.dll!std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::~_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >() Line 1091 C++
    my.dll!std::map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > >::~map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > >() C++
>   my.dll!A::b(const std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,int> > > & joint_map, const std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > & joint_names, std::shared_ptr<ik_joint_data> joint_data_in, const std::map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > > parent_index_map_in) Line 258    C++

我想知道这是否与我的DLL链接的其中一个CRT库有关?

0 个答案:

没有答案
相关问题