너무 황당한 질문입니다만...
안녕하세요.
C프로그래밍을 하다가 너무 황당한 일을 당해서요.
혹시 프로그램 내에서 변수의 위치에 따라 결과가 다르게 나올 수 있나요?
예를 들면, 제가 int xxx=0; 라는 변수를 10번째 줄에 적고(물론 main내에
있다고 가정), 컴파일 한 뒤 결과를 출력했을 때랑, 15번째 줄에 적고
컴파일&출력 했을때랑 결과가 다르게 나올수 있나요?
제가 겪은 일은 다음과 같습니다.
어떤 한 프로그램을 짰고(이름:A), A가 잘 돌아가는 것을 확인하고,
이것을 응용해서 다른 B라는 프로그램을 짰는데, 이 B가 그런 문제를
일으키더군요.
A는 잘 돌아가는데, B는 계속 세그폴트가 나더군요.
A를 응용해서 B를 만들었다고는 했는데, 사실 응용이라기 보다는
거의 베낀거고, 다만, 받아들이는 arguments만 다를 뿐입니다.
그러니까 하나의 서브루틴을 이용해서 A를 만들었기 때문에
그다지 복잡한 내용이 들어갈것도 없었구요.
아무리 찾아봐도 에러가 날 부분이 없어서, 혹시나 싶어 변수명이 겹쳐서
그러나싶어 변수명도 제 아이디를 넣어서 해봐도 소용이 없더라구요.
그래서 변수를 정리해놓고 볼려고 변수들을 선언부에서 라인을 좀
옮겼더니, B도 아무 문제 없이 잘 돌아가더군요.
이런 일이 자주 있는건가요?
아니면 제 컴퓨터가 이상한 건가요?
어제 저녁부터 지금까지 이 문제로 머리가 터질것 같았는데, 어떻게 해결하긴
했지만, 너무 황당한 곳에서 문제가 발생하는 바람에 시원하지가 않습니다.
답변 부탁드립니다.
Re: 너무 황당한 질문입니다만...
같은 프로그램도 잘못 짰을때는 매번 실행할때마다 다른 결과가 나올 수 있습니다.
실제로 저런 사항은 컴파일시 전혀 실행 코드에 영향을 미치지 않습니다.
아마도 우연일 듯 합니다.
----
http://www.planetmono.org
제가 예를 들면서 단순히 정수로만 예을 들었는데, 변수로 포이터를 많이
제가 예를 들면서 단순히 정수로만 예을 들었는데, 변수로 포이터를 많이 사용했었거든요.
저도 잘 모르지만, 실제로 똑같은 코드인데, 변수 선언라인 몇 줄을 옮겼을때와 옮기지 않았을 때 컴파일에는 영향을 미치지 않았지만, 결과에서는 영향을 미치더군요.
저도 혹시나 하고 다른 사람보고 해보라고 했는데, 역시나 저와 같은 상황이 나오더군요.
쩝~ 머가 잘못되었던 것일까요?
Astronomy+Linux
소스를 보여주시죠.. ^_^;
소스를 보여주시죠.. ^_^;
컴파일때 Optimize옵션에 따라 틀려 질수 있지 않나요?
그냥 추측일 뿐입니다.
가끔 그런 경우를 당해봐서요..
소스코드를 올려 주시면 이해하기 좀더 쉬울듯 합니다.
싸인문구;;남들은 멋있게 쓰던데..난 멀해야 할까..
예전에 친구가 자기 소스의 버그를 잡아달라길래 소스를 봤는데 두 시간은
예전에 친구가 자기 소스의 버그를 잡아달라길래 소스를 봤는데 두 시간은 족히 걸린 것 같습니다.
나중에 알고 봤더니 int a[2]로 선언해놓고 a[2]에다 값을 집어넣고 있더군요. 이런 경우는 컴파일 할 때 에러가 나지 않지요. C에서는 언어 특성상(?) array의 boundary를 체크하지 않기 때문입니다. a[2]는 a+2랑 같으니까요...
어쨌거나 그런 류의 에러같습니다. 어딘가 잘못된 부분이 분명히! 있을 것입니다. -_-;;;
컴퓨터는 거짓말을 하지 않지요...
아, 거짓말 하는 경우도 있긴 합니다. 사람이 시키면...ㅡㅡ;;
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
댓글 달기