c ++取消引用通过引用传递分配的指针,给出随机值

c++ Dereferecing Pointers assigned by pass-by-reference giving random values

我有一个指针数组,应该保存其他对象的内存位置。将数组添加到 list2 并从该对象打印出一个值给了我正确的值。但是尝试从另一个函数打印它却给了我随机值。

类:

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;
     }
}

我这里的引用和取消引用是不是错了? 任何帮助将不胜感激。

这里有一个问题:

list2[currentPos1] = &flight;

这是行不通的,因为您要将指针分配给临时 Flight。当 addFlight 函数 returns 时,该指针不再有效。

您要做的是通过引用传递 Flight(最好是 const 引用):

void Airline::addFlight(const Flight& flight)

请注意,这取决于您发送给 addFlight 的参数的生命周期。对于这个特定的函数,flight 将是有效的,但在函数调用之后,您发送的参数也必须在您打算使用存储在 list2 中的指针的整个生命周期内有效.

而不是指向 Flight 的指针数组,使用 std::vector<Flight> 会是一个更简单的解决方案。