このコードを見てください。ポイントを動的に割り当てられたポイントのダブルポインタがNULLかどうかを確認するにはどうすればいいですか?
#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
に等しいではありません。
なぜこれが起こるのか教えてください。どうすればこの問題を解決できますか?
ここで、ポインタをすべてポインタにするコードを書く方法を学びましたか?この種の問題を抱える理由はほとんどありません。また、メインメソッドのシグネチャは正しくありません。常にintを返します。 –
["using namespace std"は悪い習慣とみなされますか?](http://stackoverflow.com/q/1452721/995714)、[main'は 'int'を返すべきです](http://stackoverflow.com/q/204476/995714) –