2017-02-02 11 views
0

私は他のオブジェクトのメモリ位置を保持するはずのポインタの配列を持っています。 list2に配列を追加し、そのオブジェクトから値を出力すると、私に正しい値が与えられます。しかし、別の関数からそれを印刷しようとすると、代わりにランダムな値が返されます。C++ Dereferecingランダムな値を与える参照渡しによって割り当てられたポインタ

クラス:

class Airline() { 
Airline(); 
Flight *list2[20]; //array of pointers to Flight 
}; 

class Flight() { 
int flightNo; 
int MaxPeople; 
}; 

はフライト機能を追加します。

currentPos1 =-1  //Global Variable 

void Airline::addFlight(Flight flight) { 
currentPos1++; 
list2[currentPos1] = &flight; 
cout <<(*list2[currentPos1]).flightNo <<"\n"; //Gives proper Value 
} 

ShowAllFlights機能を:

void AirDB::showAllFlights() { 
    for (int i = 0; i <= currentPos1; i++) 
    { 
    //Both cout's provide random values; 
     cout <<"\nFlight Number: " <<list2[i]->flightNo; 
     cout <<"\nMaxPeople: " << list2[i]->maxPeople; 
    } 
} 

は私の参照、ここで間違って参照解除ですか? 非常に助かりました。

+1

コメント「ポインタへのポインタの配列」は、「飛行機へのポインタの配列」を読み込む必要があります。フライトはポインタではありません。 –

答えて

3

1つの問題はここにある:あなたが一時的Flightへのポインタを代入しているとして、機能しません

list2[currentPos1] = &flight;

addFlight関数が返るとき、そのポインタはもはや有効ではありません。これは、あなたがaddFlightに送っている引数の寿命を前提としていることを

void Airline::addFlight(const Flight& flight) 

注意:あなたが何をしたいか

は、参照(好ましくconst参照)によってFlightを渡すことです。この特定の関数の場合、flightは有効ですが、関数呼び出しの後に、あなたが格納しているポインタを使用しようとしている生涯にわたってlist2に送信する引数も有効でなければなりません。

Flightへのポインタの配列の代わりに、std::vector<Flight>を使用する方が簡単な方法です。

+0

これは恐らく呼び出される引数がおそらく –

+0

の直後に寿命を終了するため、問題を解決しないでしょう。ありがとう。それはまさに私が欠けていたものです。 – Mish

関連する問題