2012-02-27 24 views
0
vector<Flight> flights; 
while (!myReadFile.eof()) { 
    flights.push_back(*(new Flight())); 
// read some info... 
} 

をベクトルに新しいアイテムを挿入するとき:プログラムがクラッシュした第二のループ後のメッセージでプログラムがクラッシュ

「cpi.exeで0x776315deで未処理の例外:0xc0000005で:アクセス違反位置0xfeeefee2を読み込む」を

どのように問題を解決できますか?

編集:

vector<Flight> flights; 
while (!myReadFile.eof()) { 
    flights.push_back(Flight()); 
// read some info... 
} 

私はこれを試してみましたが、まだ第二のループに

編集クラッシュ:フル試し

int count = 0; 
    myReadFile >> output; 
    while (!myReadFile.eof()) { 
     flights.push_back(Flight()); 
     flights[count].setFlightNum(atoi(output)); 

     myReadFile >> output; 
     int x = atoi(output); 
     flights[count].setStartX(x); 
     myReadFile >> output; 
     int y = atoi(output); 
     flights[count].setStartY(y); 

     count++; 
     myReadFile >> output; 
    } 
+2

あなたは私たちに 'Flight'のコンストラクタ(デフォルトおよびコピー)を表示することができますか? – Naveen

+0

その空のコンストラクタです。すべてのメンバはintまたはfloatです。コピーコンストラクタはありません – Royi

+0

これはライブプロジェクトですか?空の中の私たちの友人のためだけに心配です。 –

答えて

2

あなたが直接ストリーミングする必要がありますintに変換する。 "トークン"を読み込む必要がある場合は、std :: stringを使用しますが、char配列を読み取ることは常に危険です。

std::istream& operator>>(std::istream&, Flight&)の使用を嫌っていますが、ストリームからFlightオブジェクトを作成するコードを用意しておく必要があります。「侵入型」で拡張性がないことがわかります。私はこれのために工場を好む。しかしさんはとにかくその機能を書いてみましょう:

std::istream& operator>>(std::istream& is, Flight& flight) 
{ 
    int flightnum, x, y; 
    if(is >> flightnum >> x >> y) 
    { 
     flight.setFlightNum(flightnum); 
     flight.setStartX(x); 
     flight.setStartY(y); 
    } 
    return is; 
} 

そして今:

std::vector<Flight> vec; 

while(myReadFile) 
{ 
    Flight flight; 
    if(myReadFile >> flight) 
     vec.push_back(flight); 
} 
+0

ほとんどの場合、あなたのコードでは半分の飛行を静かに読み取ることができ、最後の飛行では失敗します。 'while(myReadFile >> FlightNum >> StartX >> StartY)... –

+0

私のコードとの違いは分かりませんが、今は動作します。ありがとう – Royi

+0

はい、あなたはそれを行うことができます。私はループの外側のオブジェクトにストリームしたいと思いますが、私は3つの整数を使用し、テストの場合は1つを実行することができます。私はFlightを半分作成するかもしれませんが、それでもストリーミングは失敗し、ベクターに追加されません。 – CashCow

0

ながらを

vector<Flight> flights; 
while (!myReadFile.eof()) { 
    flights.push_back(Flight()); 
    // read some info... 
} 
関連する問題