출력 부분에서 포인터가 갈 곳을 잃어 버립니다
조회수 820회
struct custom{
custom* pLink;
custom* pToFl;
string name;
};
typedef struct portNode{
int numberOfCus = 0;
string flightName;
custom headerNode;
portNode* pLink;
}flight;
struct airport{
int numberOfPort = 0;
flight headerNode;
};
airport* createAirport(){
airport* pReturn = NULL;
pReturn = (airport*)malloc(sizeof(airport));
if(pReturn != NULL){
memset(pReturn, 0, sizeof(airport));
}
else{
cout << "메모리 할당 실패" << endl;
return NULL;
}
return pReturn;
}
void addFlight(airport* pList, string newFlightName){
flight* pNewFlight = NULL;
flight* pPreNode = NULL;
if(pList != NULL){
pPreNode = &(pList->headerNode);
while(pPreNode->flightName != newFlightName){
if(pPreNode -> flightName != newFlightName && pPreNode -> pLink == NULL){
pNewFlight = new flight;
pNewFlight -> flightName = newFlightName;
pNewFlight -> pLink = NULL;
pNewFlight -> pLink = pPreNode -> pLink;
pPreNode -> pLink = pNewFlight;
}
pPreNode = pPreNode->pLink;
pList->numberOfPort++;
}
}
}
void addCustomer(airport* pList, string newFlightName, string newName){
custom* pNewCustom = NULL;
custom* pPreNode = NULL;
flight* pNewFlight = NULL;
pNewCustom = new custom;
if(pNewCustom != NULL){
pNewCustom -> pLink = pNewCustom;
pNewCustom -> pToFl = pNewCustom;
pNewCustom -> name = newName;
pNewFlight = &(pList->headerNode);
while(pNewFlight->flightName != newFlightName){
pNewFlight = pNewFlight -> pLink;
}
pPreNode = &(pNewFlight->headerNode);
pNewCustom -> pToFl = pPreNode;
pNewCustom -> pLink = pPreNode -> pLink;
pPreNode -> pLink = pNewCustom;
}
}
}
--------문제는 이 데이터를 출력하는 부분입니다-----------
void displayCustomer(airport* pList, string newFlightName){
flight* pNode = NULL;
custom* pCustom = NULL;
if(pList != NULL){
pNode = (pList->headerNode.pLink);
while(pNode->flightName != newFlightName){
pNode = pNode -> pLink;
}
pCustom = pNode->headerNode.pLink;
}
while(pCustom -> pLink != pCustom){
-----여기서 문제가 발생합니다------
cout << pCustom->name << endl; //여기서 Thread 1: EXC_BAD_ACCESS (code=1, address=0xc) ##에러 코드가 뜹니다
pCustom = pCustom->pLink;
}
}
int main() {
airport* pList = NULL;
int choice;
string portName;
string name;
pList = createAirport();
while(true){
cout << "CHOICES:\n";
cout << "1. Add an Airport\n";
cout << "2. Find an Airport - Standard Looping\n";
cout << "3. Exit Program\n";
cout << "Enter your choice: ";
cin >> choice; cout << "\n\n";
switch(choice){
case 1: cout << "Inserting Airport\n";
cout << "portName: " << endl;
cin >> portName;
addFlight(pList, portName);
cout << "name: " << endl;
cin >> name;
addCustomer(pList, portName, name);
break;
case 2: cout << "Finding Airport\n";
cout << "portName: " << endl;
cin >> portName;
displayCustomer(pList, portName);
break;
case 3: cout << "Terminating......\n";
exit(EXIT_SUCCESS); break;
default: cout << "Not Valid\n\n";break;
}
}
}
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
어떤 프로그램을 짜고 있는지에 대한 설명과, 어떤 어려움를 겪고있는 지에 대한 것을 자세하게 적어주시면 답변하기 편할 것입니다.
구조를 살펴보니 하나의 airport내에 다양한 port(flight)가 Linked List로 저장되며, 각각의 port(flight)에는 여러 custom이 Linked List로 저장되는 것 같군요.
프로그램을 실행했을 때, 메인입력에서 1을 누르면 port(flight)명과 custom명을 입력할 수 있고, 2를 누르면 해당 port(flight)에 등록된 custom명을 모두 출력하는 프로그램을 짜고 계신것 같네요.
void displayCustomer(airport* pList, string newFlightName){ flight* pNode = NULL; custom* pCustom = NULL; if(pList != NULL){ pNode = (pList->headerNode.pLink); while(pNode != NULL && pNode->flightName != newFlightName){ pNode = pNode -> pLink; } if(pNode == NULL) // 해당 flightName이 리스트에 없는 경우 함수 종료 return; else pCustom = pNode->headerNode.pLink; } while(pCustom != NULL){ //리스트의 마지막 노드까지만 접근 cout << pCustom->name << endl; pCustom = pCustom->pLink; } }
이렇게 고쳐보시기 바랍니다..
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력