関数からイテレータを取得し、リストから要素を消去しようとしました。std :: list :: erase(iter)例外処理C++
- この例外を検出する方法はありますか?
- イテレータが有効かどうかを知る方法はありますか?
私は、無効なイテレータでプログラムを実行すると、それは次の例外スロー:
Exception thrown: read access violation.
_Right.**_Myproxy** was 0xCCCCCCCC. occurred
マイfuncがある:
list<AccountStruct>::const_iterator SearchAccount(list<AccountStruct>& Acc,string p)
{
for (list<AccountStruct>::const_iterator j = Acc.begin(); j !=Acc.end(); ++j)
{
if ((*j).phone == p) return j;
}
}
void RemoveAccount(list<AccountStruct>& Acc)
{
string Phone;
cout << "Enter Phone Number ->" << endl;
cin >> Phone;
//cout << "Searching..." << endl;
list<AccountStruct>::const_iterator iter = SearchAccount(Acc,Phone);
try
{
Acc.erase(iter);
}
catch()// <- What to put inside??
{
cout << "No Phone Number;" << endl;
}
}
あなたの時間は、アクセス違反の原因を突き止めるために費やされた時間です。 'SearchAccount'はイテレータをローカルの' list'関数に返しますか? – Praetorian
C++の例外ではないので、あなたはそれをキャッチできません。 'SearchAccount'が別のリストのイテレータを返す場合にのみ、この行に未定義の動作があります。 – Rakete1111
質問に別の関数を追加しました – axcelenator