하루이틀 겪는 것도 아니지만, 삽질을 하고나면 스스로가 참 바보처럼 느껴집니다. 어처구니가 없죠. 그래도 기록해둡니다.

1차원 격자 위의 어떤 시스템을 시늉내던 중이었습니다. 격자의 크기를 점점 키우다가 2^16까지 키웠을 때는 문제없이 잘 돌아갔고 결과도 잘 나왔습니다. 그런데 2^17으로 키우고나니 컴파일은 성공적으로 되었는데 실행하고나면 영 이상한 결과가 나왔습니다.

메모리 설정의 문제인지 어떤 문제인지 모르고 있다가 컴퓨터를 잘 하시는 다른 분께 여쭤보니 말만으로는 문제가 어떤건지 모르겠다고 하셔서 같이 제가 짠 프로그램을 보며 의견을 들었습니다. 사실 프로그램이 별로 복잡하거나 길지 않음에도 쉽게 문제를 발견하지 못했는데요, 그러다가 제가 잘못한 부분을 찾아냈습니다.

unsigned short로 선언한 배열(크기는 L)이 3개가 있었는데 그중 2개의 배열에는 0과 1만 값으로 갖습니다. 하지만 나머지 하나는 그 값으로 0부터 L-1까지를 갖는 것이었습니다. short가 2바이트이며 unsigned로 선언했으니 이 배열이 가질 수 있는 값은 0부터 2^16 - 1까지였던 겁니다. 그러니 L을 2^17로 하자마자 배열 선언은 문제없지만 그 배열에 들어가는 값이 한도를 넘어버린 거죠.

혼자서 차분하게 다시 프로그램을 들여다보면 찾았을런지 모르지만, 역시나 다른 사람들에게 도움을 구하는 과정에서 문제가 뭔지 발견할 수 있었습니다. 그리고 그렇게 물어보는 과정에서 프로그램의 다른 부분까지도 좀더 효율적으로 수정할 수 있었습니다. 별 얘기 아닌데 또 길어졌네요.