2012-04-22 12 views
0

最初のtry-> getValue()はうまく見えますが、下の行(whileループの先頭)はgetValueメソッド内でエラー "アクセス違反"を返します。C++呼び出しが2回アクセス違反の原因となる

if(first != 0){ 
    listElement *that = first;  

    cout << "add: " << that->getValue() << " | " << value << endl; 

    while(that->getValue() < value) {..} 
} 

どこでも通話中に値を編集しますか? getメソッドは

+3

情報が不十分です: 'getValue'の中身は何ですか? 'while'ループ本体の中で何が起こっていますか? – Vlad

+0

すべてのコードが必要です。 P.S.あなたが言っていることが真実なら、whileは無限です。 –

+0

スマートポインタを使用していない理由は何ですか? –

答えて

4

明白な説明がある....単に「戻り値」で構成されている内部のこのコードで

while(that->getValue() < value) {..} 

{..}あなたがthat = that->next;を行うと、NULLポインタにthatを設定しています。

whileループにthat != NULLのテストを追加して、検索条件を満たす項目を見つけずにリストの末尾に来ないようにする必要があります。

while(that != NULL && that->getValue() < value) 

あなたはすべてのコードが含まれていた場合、コードの重要なビットが{..}ブロックであると思われるので、それは助けているだろう!

+1

ねえ、水晶球を貸してくれますか? – Vlad

+1

@Vladコードでは、 'listElement'、' first'と 'while'のリンクリストの反復のすべての特徴を見ることができます。 –

+0

ok、あなたは正しいですが、whileループの中でnext()を呼び出します。どちらが私の最初の変数を次のポインタ0に設定することで解決しましたか?しかし、なぜwhileループの先頭にエラーが発生するのか理解できません。ループになると思います。しかし、この場合、whileループヘッダーは、nextが呼び出される前に解決されるべきです – user972851

関連する問題