pielo   1년 전

41번째 줄의 주석 처리를 제거하여 (free(words_temp[i]);)를 추가하여 제출하면 '런타임 에러 (DoubleFree)'가 발생합니다. 즉,

free(words[i]);
free(words_temp[i]);

를 둘 다 사용하면 double free가 발생합니다. 주석을 처리를 유지한 채 제출하면 정상적으로 모든 테스트 케이스를 통과합니다.


double free error는 메모리가 할당되지 않은 포인터를 할당 해제 시키려고할 때 발생하는 것으로 알고 있습니다.

25번째 줄과 26번째 줄에서 words[i]와 words_temp[i]에 각각 따로 메모리를 할당했는데,

왜 둘을 각각 할당 해제 하면 double free가 발생하는 지 모르겠습니다.

pielo   1년 전

자체적으로 원인을 찾았습니다.

words_merge()함수에서 92번 째 줄 등에서

strcpy(w_temp[k++], w[j++]);를 사용해야하는데

w_temp[k++] = w[j++];를 사용하여 string이 아닌 string 포인터가 복제되었고, 이로 인해 w_temp[i]가 w[i] 값을 갖게 된 것이 문제였습니다.

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