12161542   4년 전

한번 push를 해서 값을 넣고, pop으로 모든 원소를 빼낸 뒤, push를 하면 정상작동을 안하네요 이유가 궁금합니다

12161542   4년 전

무슨뜻인가요??

wjsqjawns   4년 전

반복문 처음에 Q.SLinkedQueue();

반복문 끝에 Q.~SLinkedQueue();

되는 게 이상한 게 아닐까요?


wjsqjawns   4년 전

입력을 받고 head와 tail을 변경했는데,

반복문 마지막에 다 NULL로 바껴요.

12161542   4년 전

Q.~SLinkedQueue();를 지워도 달라지지 않아요

wjsqjawns   4년 전

9c09c441-c065-443c-9cf2-b488c86f5bdd

12161542   4년 전

아아 이해했어요 감사합니다

wjsqjawns   4년 전

이미지를 참고해 주시기 바랍니다.

wjsqjawns   4년 전

또한 pop()에서 런타임 에러가 발생하니, 이 또한 약간 수정하셔야 할 듯하네요.

12161542   4년 전

어... 그러네요 뭐가문제지;;

12161542   4년 전

void push함수 안의 if(tail==NULL)을 if(head==NULL)으로 바꾸니 correct뜨긴 하는데
이유가 궁금합니다!!!

wjsqjawns   4년 전

pop() 함수를 계속 호출하여 head와 tail이 가리키는 게 같아졌다고 가정해보죠.

그 상태에서 만약 pop()를 호출하게 되면, 

head는 head->next가 되는데, 이 때 head->next는 NULL입니다.

하지만 tail은 다릅니다.

tail이 가리키는 값이 delete 된다고 해도, tail이 가리키는 건 NULL이 아닙니다.

그래서 push()에서 head==NULL이라고 조건을 붙이면 실행이 되지만,

tail==NULL이라고 조건을 붙이면 실행이 되지 않습니다. 

wjsqjawns   4년 전

그래서 보통 저런 경우엔 delete를 한 후, 해당 값을 가리키던 포인터가 있다면 그것을 NULL로 바꿔줘야 해요.

12161542   4년 전

항상 감사합니다!!

12161542   4년 전

이렇게하니까 되네요!

댓글을 작성하려면 로그인해야 합니다.