dlaehdeod   6년 전

133번의 free() 부분을 다 지우면 정답이 맞다고 나오는데

제가 할당시킨 공간을 해제해주고 싶은데 런타임 오류가 나네요

무슨 문제인지 잘 모르겠네요.. 도와주세요 ㅠ_ㅠ

djm03178   6년 전

할당은 0부터 n-1까지밖에 안 해줬는데 해제는 n까지 하려고 하니까 문제가 됩니다.

dlaehdeod   6년 전

createGraph(&g, n + 1); 를 통해
n이 7이면
g.edge[8][8] 이 되게 만들었습니다..
이상하게 free(q.queue) 쪽을 만나자마자 에러가 뜨게 되네요..
힙영역 버퍼의 끝 공간을 사용했다는 식으로요..

djm03178   6년 전

아... 코드를 제대로 파악하지 못하고 답변했었네요. 역시 눈으로 디버깅하면 실수가 잦네요. 다시 한 번 볼게요.

djm03178   6년 전

아 뭔지 나왔습니다.

28번째 줄에 보면 g->edge는 int **형이기 때문에 할당 시에 int * 형이 n개 있는 만큼의 공간이 할당되어야 하는데, 크기를 sizeof(int *)이 아니라 sizeof(int)로 줬기 때문에 크기가 모자랍니다.

환경에 따라서는 int는 4바이트고 포인터는 8바이트일 수 있고, 채점 환경도 그렇습니다. 이건 free 자체에서 문제가 생겼다기 보다는 이미 이전에 침범한 흔적을 free 함수가 발견했다고 할 수 있겠네요.

dlaehdeod   6년 전

악 그렇네요.. ㅠㅠ 정말 감사합니다!! 위에는 문제 없겠지 했는데 범인은 역시 제 손이군요.. 감사합니다!!

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