class A {
...
int max_length;
...
void build() {
...
if (length>max_length) max_length=length;
...
}
void check();
};
머리를 벽에 헤딩하고 싶다...
중간 과정에서 어떤 자료 구조의 max_length가 나중에 필요해서 그 걸 만들 때 max_length를 구하게 하는 간단한 코드인데 나중에 check()에서 실제로 자료 구조 다시 돌면서 구한 max length와 죽어라도 안 맞는 것이다. 머냐...어디가 잘못됐지? 꽤 오랜 시간 헤메다 보니 크헐... max_length 가 초기화가 안돼서 생긴 문제였다. check 안에서 체크할 때는 지역 변수로 0으로 초기화하니 올바르게 계산되었고 max_length는 클래스 생성시 나 메쏘드 안에서 초기화를 안해줘서 엄청 큰 쓰레기 값이 들어가서 그 값이 계속 끝까지 남아 있었던 버그... 우후... 내가 죽어야지... 처음 클래스 만들 때 만든 멤버들은 모두 올바르게 초기화를 해줬으면서 중간에 max_length를 추가하면서 그냥 코딩했구나.. Java에서 멤버는 디폴트로 초기화가 0으로 되어서 무의식적으로 그냥 변수만 추가했다고 자위를 해본다.
멤버나 변수 꼭 초기화 합시다!
초기화? 0으로만 하면 되겠지...하고 습관적으로 그렇게 하다가는 큰 코 다친다.
int min_size = 0;
...
min_size = min(size, min_size);
이렇게 초기화를 잘못해줘서 버그 만든 경험도 기억이 난다. 이렇게 구한 min_size값이 대부분 우연히 맞는 값일 경운 나중에 더 골때리게 발견될 것이다. 이거 의외로 만만히 볼 문제가 아니다.


Powerd by Tattertools.com