2016-04-13 4 views
0

C++のリスト操作に問題があります。私はこの言語の初心者です。リストイテレーションsegfaultをリストする

だから、私はそのように作成したリストを持っている:私はサムスオブジェクトを構築

list<Auction> MyAucList; 

と私はリストに入れて:

Auction test(a, i); // a and i are int 
MyAucList.push_back(test); // I put my objects in the list 

、同じ機能で、私は繰り返すことができリストからオブジェクトのデータを次のように取得します。

for (list<Auction>::const_iterator it1 = MyAucList.begin(); it1 != MyAucList.end(); ++it1) 
{ 
if ((*it1).Getitem() == 118632) 
    cout << "FOUND !" << endl; 
} 

これは期待どおりに機能します。

しかし、私はantoher関数リストを参照渡す場合:

listHandling(MyAucList); 
} 

void  listHandling(list<Auction> &MyAucList) 
{ 
    for (list<Auction>::const_iterator it1 = MyAucList.begin(); it1 != MyAucList.end(); ++it1) 
    { 
     if ((*it1).Getitem() == 118632) 
      cout << "FOUND : " << 118632 << endl; 
    } 
} 

を私は参照を使用しない、またはポインタが、同じ結果と試み :-(セグメンテーション違反を得る 。あなたはこの問題についての考えを持っていますか?あなたの助けを

ありがとう!

+0

もう1つは、あなたの関数に 'MyAucList'がありません。パラメータはMyListです。 「MyAucList」はどこから来たの?実際の* [MCVE](https://stackoverflow.com/help/mcve)を投稿してください。 – WhozCraig

+0

@WhozCraig:申し訳ありませんが、投稿の編集中に間違いを犯しました。編集します。 – LightMan

+1

偉大な、今、そのコメントの2番目の部分に留意してください。私の哀れな安いガラスの模造水晶球は、「オークション」が[ルールの3つ](https://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming))を破っているが、[** MCVE **](https://stackoverflow.com/help/mcve)それは確かに知ることは不可能です。私たちは読者ではありません。 *デバッガ*でこれを実行すると、車輪が落ちた場所を正確に伝えることができます。 – WhozCraig

答えて

1

と間違って何もfollによって証明されるように、あなたが何をしようとしてありませんコード:

7 
42 
    Found 42 
99 
314159 
=== 
7 
42 
    Found 42 
99 
314159 

が故にほぼ確実方法に問題があるのです。

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

class Auc { 
     private: int myX; 
     public: Auc (int x) { myX = x; } 
       int GetItem() { return myX; } 
}; 

void listHandle (list<Auc> y) { 
    for (list<Auc>::const_iterator it = y.begin(); it != y.end(); ++it) { 
     cout << ((Auc)*it).GetItem() << endl; 
     if (((Auc)*it).GetItem() == 42) 
      cout << " Found 42\n"; 
    } 
} 

int main() { 
    list<Auc>  x; 
    Auc a(7);  x.push_back(a); 
    Auc b(42);  x.push_back(b); 
    Auc c(99);  x.push_back(c); 
    Auc d(314159); x.push_back(d); 

    for (list<Auc>::const_iterator it = x.begin(); it != x.end(); ++it) { 
     cout << ((Auc)*it).GetItem() << endl; 
     if (((Auc)*it).GetItem() == 42) 
      cout << " Found 42\n"; 
    } 

    cout << "===\n"; 

    listHandle(x); 
} 

は、これは非常に喜んで、それは別のものに同じ機能または呼び出しによって行うのかどうかのデータをプリントアウトあなたはそれをやろうとしています。あなたが完全な例を提供してくれれば、あなたを助けてくれるはずです。

私の提案は、上記の私のコードを調べて、それを理解しようとしています。それで、あなたが持っているものがなぜ異なって行動しているのかを理解することができます。