min6093   2년 전

예제는 정상적으로 처리 되는데 제출하면 런타임에러가 발생합니다..

도움 부탁 드립니다.

dps2   2년 전

치명적인 오류가 하나있고 그와 별개로 수정해야할 부분들도 몇가지 있습니다.

치명적인 것부터 말씀드리자면 29번째 줄의 createNode함수가 newNode를 return하고 있지 않습니다.

그렇다면 로컬에서는 이게 왜 맞은거지...?라고 생각하실 수 있는데 그 이유를 다룰려면 조금 딥하게 들어가야합니다.

그 이유는 C에서는 return할때 x86아키텍처 기준 eax,rax(32bit,64bit) 레지스터를 이용하는 것이 표준입니다.

따라서 31번째 줄에서 newNode가 eax/rax에 남아있고 return하는게 없으니 eax,rax에 값을 대입하지 않고 함수가 종료되기 때문에

마치 newNode를 return 받은 것 마냥 작동되었던 것입니다.

컴파일러마다 레지스터 사용이 조금씩 다른데 아마 이 채점환경에서는 33, 34번째 줄을 작동시키며 eax,rax값이 오염되지 않았나 싶습니다.

다음 문제들은 상대적으로 치명적이진 않지만 고치시면 좋을 부분들입니다.

12번째 줄에 node의 data형이 int 포인터로 되어있습니다.

그 이후 코드들을 보아도 의미를 생각해도 int가 맞습니다.


127번째 줄에서 &str로 쓰셨는데 배열의 이름 자체가 시작주소를 나타내기 때문에 str로 쓰셔야합니다.

pop함수에서 free를 안해주시고 계십니다. 이렇게 되면 메모리누수가 일어납니다.

전체적으로 코드 다듬고 수정해서 첨부합니다. 위에 쓰지 않은 설명들도 주석에 남겨두었으니 한번 읽어보시기바랍니다.

이해안되시는 부분 있으시면 댓글남겨주세요.

min6093   2년 전

정말 감사합니다!!

자세히 설명 해주셔서 공부하는데 많은 도움 되었습니다!! 

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