2011-09-16 11 views
1

インデックス19の最後の値まですべてが正常に機能します。実際には、すべての値が出力されます。最終値&のインデックスを出力すると、フォールトが発生します。私はこれが20番目の値にアクセスしようとしているからだと仮定しています。これを防ぐにはどうすればいいですか?Forループ上のC++セグメンテーションフォルト

メインファイルCODE:

int index = 0; 
while (index < list.length()) 
{ 
    cout << list.getNextItem(index) << " " << index << "\n"; 
    index++; 
} 

ヘッダコード:

template <class Type> 
Type doublyLinkedList<Type>::getNextItem(const Type& val) const 
{ 
    nodeType<Type> *current; //pointer to traverse the list 

    current = first; //set current to point to the first node 

    for (index=0; index < val; index++) 
    { 
     if (current != NULL) 
     { 
      current = current->next; 
     } 
    } 
    return current->info; 
}//end getNextItem 
+1

これは非常に奇妙な実装です。 'getNextItem'で' index'はどこで初期化されていますか?なぜリストは貧しい人のベクトルのように横断されていますか? –

+0

また、マジックナンバー19と20はどこから来たのですか? –

答えて

1

current->infoはヌルチェックの対象外です。 currentがnullの場合、そのポインタにアクセスできず、segフォルトが発生しません。

+0

ここに他に具体的なコードを含める必要がありますか?ヘッダーファイルは約7ページですが、私はそれをすべて投稿しませんでした。 私がこれまでに変更したのは、この関数の最後です。 ** if(現在の== NULL) return 0; 他 リターンの電流>情報; **、それは今までにNULLを指すように取得していないように はまた、私は、ヴァル-1として、それを維持しようとしたが、それは単に、リスト内の1つの要素が欠落し、それを左に(最後の一つ)。 – jenna

+0

-1を使用しても安全ではありません(無効なアドレスを参照しています)。それは返されるアイテムがなくなったときに消費者に伝えるために返すことを期待しているもの(ロジック)に依存します。 – datalost

3
for (index=0; index < val; index++) 
{ 
    if (current != NULL) 
    { 
     current = current->next; 
    } 
} 
return current->info; 

あなたはcurrent->nextcurrentを割り当てます。それがnullの場合は、がnullの場合、current->infoを返そうとすると、となります。

少なくとも私の疑惑です。あなたが投稿するコードは不完全であり、あなたに具体的な答えを与えることは不可能です...しかし確かにそれは原因です。