5 5
0 0 0 0 0
0 5 5 0 0
0 0 5 0 0
0 0 5 0 0
0 0 0 0 0
14500번 - 테트로미노
20이 나오는게 맞는거 아닌가요..??
우선 해명부터 하겠습니다. ㅠㅠ
https://ideone.com/NgrzOm <-- Gcc
https://ideone.com/JFUAnY <-- Clang
두개의 다른 컴파일러로 했을 경우 15, 20으로 서로 다른 결과가 나왔습니다.
물론 컴파일러 버그는 아니고 코드 문제 때문에 생긴 거고..
모든 컴파일러에서 문제가 생기는 케이스를 다시 드리겠습니다.
5 5 0 0 0 0 0 0 5 0 0 0 0 5 5 0 0 0 0 5 0 0 0 0 0 0 0
두 컴파일러가 다른 결과가 나오는 것은 코드를 잘못짰을 경우 gcc에서는 stack 메모리가 깨지고 clang 은 안깨져서 생기는 문제네요.
그런데 저는 코드상에서 메모리를 사용하는게 map[502][502]를 사용하고 이는 전역변수를 통해 사용는데 stack메모리가 깨질 수 있는건가요.. ㅠㅠㅠ 어디서 stack메모리가 깨지는지를 모르겠습니다.. ㅠㅠ
four1 함수에 보면 함수 정의는 리턴값이 있는데 실제 return문 이 없습니다.
보통 함수 호출시 매개변수 전달이나 return 값 전달은 stack 을 사용하게 되는데,
four1 함수 종료 후에 main 함수로 돌아와서 stack 에서 값을 하나 pop 합니다. (gcc 의 경우)
근데 four1 함수 내에서 return 문 (리턴값을 push하는) 이 없으니
main 함수 내의 엉뚱한 값을 pop 해서 스택이 꼬이는 것 같습니다.
정확히 기억은 안나는데 clang 은 return 값 정리하는 부분이 좀 달랐던 것 같습니다.
정말 감사합니다.. ㅠㅠㅠㅠ
댓글을 작성하려면 로그인해야 합니다.
moyoungmin 4년 전 1
제목과 같이 시도를 해봤는데 계속 틀립니다가 나옵니다... ㅠㅠ 어떤 반례가 있을까요.. 하드코딩으로 구현했습니다...