从Map中删除后访问指针

时间:2018-02-27 07:59:17

标签: c++ c++11 pointers access-violation

我的代码实现中的示例场景如下

我有一张定义为map<int,map<int,object*>*>的地图。堆中的内部映射具有对象指针。

情景是,

使用(处理)内部地图中的所有元素。我将使用迭代器擦除内部地图内容。但是对象*不会被删除。从地图中删除密钥后,我将进一步使用对象指针。

我的问题是,即使在擦除它在地图中的存在之后,该对象也会存在。据我所知,是的,对象在堆中,即使在地图中擦除后也可以使用它。但是我在执行几分钟后面临着随机崩溃的过程。这让我在这里发布问题。

multimap<ULONG, Class*>::iterator it_top3 = InnerMap->begin();
if (InnerMap->size() >= classLimit)
{
    if (it_top3->first <= ClassObj->m_classSize)
    {
        if (it_top3->second != NULL)
        {
            delete it_top3->second;
            it_top3->second = NULL;
        }
        InnerMap->erase(it_top3);
        InnerMap->insert(pair<ULONG, Class*>(ClassObj->m_classSize, ClassObj));
}

其次,在分析调试diag时,行it_top3->second = NULL;指向具有访问冲突异常的崩溃点。造成这次事故的可能原因是什么??

0 个答案:

没有答案