2016년 5월 2일 월요일

BOJ 6086류의 문제와 bad_alloc 문제

이런 문제들은 int, char를 입력 받아야 하는데,
scanf를 이용해서 받다보니 int형이야 별 문제 없지만 %c가 중간 중간에 있을 경우... %*c의 추가가 필요하다. 그렇지 않으면 enter가 들어가고, 한칸씩 당겨져서 의도치 않은 값들이 변수에 들어가게 된다.

그래서 매우 주의해야 하고 신경써야 함에도 불구하고 이런 실수를 엄청 많이 했다. 예전에도 여러번 그랬는데, 이 BOJ 6086번에서는 bad_alloc이라는 문제가 뜨면서 프로그램이 종료되는... 그래서 bad_alloc을 찾아보니 대충 메모리 관련 문제인 것 같은데, 뭐가 문제인지 잘 몰라서 디버깅을 해보니... vector<int> parent(n, -1) 이 부분에서 걸리는 것이었다.

그래서 보니 위에 %*c를 이용하지 않아서 추가한 후 다시 컴파일을 해보았는데.. 여전히 bad_alloc에러... 그래서 다시 디버깅을 해보았다.

음... 문제가 저 문제가 아니었다. 하긴 저렇게 %*c를 써주지 않아도 어차피 n은 맨 처음 받는 정수값이라 아무 상관이 없을 텐데...

문제는 vector<int> parent(n, -1) 이 부분에서 n이 -1이라는 것이 문제였다. 역시.. 백터의 크기를 -1로 할당하려니 .. bad_alloc문제가 뜬 것 같다.

그리고 n이 -1이 된 이유는 while(n--)를 이용해서 n번 입력을 받으려고 해서 그런 것어있다.
for(int i=0; i<n;i++)로 바꾸고 다시 해보았다.

에러없이 정답이 잘 나온다.

요즘 건강관리의 필요성도 느끼고 있고.. 집중력도 좀 떨어지고 이렇게 자잘한 어이없는 실수도 많이하고 생각없이 프로그래밍하고 억지로 공부하고 재미없게 공부하고 있다.

정신차리자. 건강관리도 하고, 운동하고, 집중할 수 있도록 잠도 많이자고, 즐거운 마음으로 기쁘게 살자. 기쁘게 공부하자. 감사하자.

댓글 없음:

댓글 쓰기