如何检查指向动态分配单个指针的双指针是否为NULL?

时间:2016-11-30 12:36:35

标签: c++

请查看此代码。

#include <iostream>
#include <list>
using namespace std;

void main()
{
    list<int*> m_List;
    int* i = new int(1);
    m_List.push_back(i);

    list<int**> m_pList;
    m_pList.push_back(&m_List.front());

    list<int*>::iterator iter = m_List.begin();
    delete *iter;
    *iter = NULL;
    cout << *iter << endl;
    cout << &*iter << endl;
    iter = m_List.erase(iter);

    list<int**>::iterator iter2 = m_pList.begin();
    cout << **iter2 << endl;
    cout << *iter2 << endl;
}

结果:

00000000
00A31A90
DDDDDDDD
00A31A90

&*iter等于*iter2,但*iter不等于**iter2

请教我发生这种情况的原因,以及如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

执行m_List.erase(iter);后,m_List为空,**iter2未定义。
*iter2m_List的第一个元素的地址,该元素不存在。)

很难说如何“解决这个问题”,因为目前还不清楚“这个”是什么。

答案 1 :(得分:0)

这是因为你删除了它。

当你从m_list中删除元素时,你的前一个&amp; m_list.front()无效。剩下的就是未定义的垃圾。

不要删除它,结果将是您所期望的。

但是你的指针,列表和迭代器的混合是非常迟钝和奇怪的,你可能想看看是否有办法清理你的实际代码。