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>
会是一个更简单的解决方案。
我有一个指针数组,应该保存其他对象的内存位置。将数组添加到 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>
会是一个更简单的解决方案。