2014-10-23 3 views
0

안녕하세요 저는 pop과 push의 두 가지 함수를 만들었습니다. 문제는 pop 함수 이후에 프로그램이 충돌하고 왜 그럴 수 없는지입니다. 네가 나를 도울 수 있으면 기쁠거야.스택에서 팝 및 푸시 함수 연결 목록

Struct Node 
{ 
    int num; 
    Node *next; 
}; 

void push(Node** top, int num) 
{ 
Node* tmp = *top; 
Node* newNode = new Node; 
newNode->num = num; 
*top = newNode; 
newNode->next = tmp; 

}

int pop(Node* top) 
{ 
Node *poppedLink = top; 
top = poppedLink->next; 
int ans = poppedLink->num; 
delete poppedLink; 

return ans; 

}

+0

귀하의'Node' 정의가 컴파일되지해야합니다. – user2079303

+0

죄송합니다. 부분을 잊어 버렸습니다. (수정 됨) –

+1

지금은 더 좋지만, C++에는 ** S ** truct 키워드가 없습니다. – user2079303

답변

3

노드를 삭제하지만, 외부 코드이 인식하지 않는 오래된 포인터를 계속 사용 (이미 죽은입니다) "최고". push() 에서처럼 두 번 포인터를 입력 매개 변수로 사용해야합니다. 이 같은

뭔가 (죄송합니다, 나는 그것이 컴파일러에 테스트하지 않았다) :

int pop(Node** top) 
{ 
Node *poppedLink = *top; 
*top = poppedLink->next; 
int ans = poppedLink->num; 
delete poppedLink; 

return ans; 
} 
+0

@roihoyli, 내 게시물을 편집했습니다. 위를 참조하십시오. –

+0

당신이 가장 고맙습니다! –

관련 문제