dmbs335   6년 전

틀린게 없어보이는데 2퍼센트에서 틀렸다고 떠서

온갖 테케를 다 찾아서 입력해봐도 정상적으로 나오는데 왜 틀린지를 모르겠습니다.

seico75   6년 전

예외케이스 때문이 아니라 다른 이유때문인것 같습니다.

이차원 배열에 캐스팅까지 하시면서 큰 오류 없고 깔끔하게 코딩을 잘 하시는 것 같네요.

문제는 front = &q.front(); q.pop(); 인 것 같습니다.

복사를 최소화하려고 q.push(Point(i,j,0)); 이렇게하고 포인터로 받으셨는데, 

q.pop() 하는 순간 front 가 가리키는 곳은 해제(보호받지 못하는 메모리)가 되어 버려서 다른 값이 써질 수 있습니다.

운이나 컴파일러, 옵션에 따라서 문제가 없을 수도 있지만 분명 오류가 있는 코드인 것 같습니다.

값을 참조로 받지 않고나 q.pop()을 front 다 쓴 순간 (69줄)로 옮기면 어떨까 합니다.


그리고 사족이지만

* visit[i][j+1] = 1; // visit 은 bool 배열입니다.

* malloc 보다는 new 를 썼으면 더 깔끔하지 않았을까 합니다.

* Tomato 는 계산만하고 출력은 main 에 하면 역할 분담이 더 잘되지는 않았을까란 생각을 해봅니다.


dmbs335   6년 전

아 헐... 정말 감사합니다!!!!!!

그냥 무심코 썼는데 생각해보니 정말 그러네요 ㅋㅋㅋ

덕분에 해결 했습니다.

dmbs335   6년 전

malloc 은 반복문 없이 VLS 유사 기능으로 2차원 배열 폭을 동적으로 결정하려고 저렇게 사용한건데

int (*map)[M] = (int (*)[M])malloc(sizeof(int)*M*N);

new 를 사용하는 대안을 모르겠네요.

seico75   6년 전

죄송합니다. ㅠㅠ new 는 제가 딴 언어랑 착각했네요.

int (*map)[M] = (int(*)[M])(new int[N*M]);

이 정도인것 같은데 별 차이없네요.

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