2017-02-02 3 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

'포인터에 대한 포인터의 배열'은'Flight에 대한 포인터의 배열'을 읽어야합니다. 비행편은 포인터가 아닙니다. –

답변

3

한 가지 문제는 여기에 있습니다 : 임시 Flight에 대한 포인터를 할당하고 같이 작동하지 않습니다

list2[currentPos1] = &flight;

. addFlight 함수가 반환되면 해당 포인터는 더 이상 유효하지 않습니다. 이것은 당신이 addFlight에 보내는 인수의 수명에 입각 것을

void Airline::addFlight(const Flight& flight) 

참고 :

은 당신이하고 싶은 참조 (바람직하게는 const 참조)을 Flight을 통과합니다. 이 특정 함수의 경우 flight이 유효하지만 함수 호출 후에는 전송중인 인수가 list2에 저장된 포인터를 사용하려는 수명 동안 유효해야합니다.

Flight에 대한 포인터 배열 대신 std::vector<Flight>을 사용하는 것이 더 쉬운 솔루션입니다.

+0

호출 인수가 아마도 –

+0

고맙다는 직후에 수명이 끝나기 때문에 아마도이 문제는 해결되지 않을 것입니다. 그게 제가 누락 된 부분입니다. – Mish

관련 문제