moyoungmin   4년 전

제목과 같이 시도를 해봤는데 계속 틀립니다가 나옵니다... ㅠㅠ 어떤 반례가 있을까요.. 하드코딩으로 구현했습니다...

seico75   4년 전

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

moyoungmin   4년 전

20이 나오는게 맞는거 아닌가요..??

seico75   4년 전

어제 제가 돌렸을 때에는 15가 나오는 것을 확인하고 올렸는데 지금은 20이 나오네요. ㅠㅠ

seico75   4년 전

우선 해명부터 하겠습니다. ㅠㅠ

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 은  안깨져서 생기는 문제네요.

moyoungmin   4년 전

그런데 저는 코드상에서 메모리를 사용하는게 map[502][502]를 사용하고 이는 전역변수를 통해 사용는데 stack메모리가 깨질 수 있는건가요.. ㅠㅠㅠ 어디서 stack메모리가 깨지는지를 모르겠습니다.. ㅠㅠ

seico75   4년 전

four1 함수에 보면 함수 정의는 리턴값이 있는데 실제 return문 이 없습니다.

보통 함수 호출시 매개변수 전달이나  return 값 전달은 stack 을 사용하게 되는데, 

four1 함수 종료 후에 main 함수로 돌아와서 stack 에서 값을 하나 pop 합니다. (gcc 의 경우)

근데 four1 함수 내에서 return 문 (리턴값을  push하는) 이 없으니

main 함수 내의 엉뚱한 값을 pop 해서 스택이 꼬이는 것 같습니다.

정확히 기억은 안나는데 clang 은 return 값 정리하는 부분이 좀 달랐던 것 같습니다.

moyoungmin   4년 전

정말 감사합니다.. ㅠㅠㅠㅠ

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