joony94   6년 전

예시 나온것도 잘 나오고 답은 잘 나오는데 런타임 에러가 뜨네요ㅠ 왜 이런 걸까요??

djm03178   6년 전

list = (char**)malloc(sizeof(char)*N*(N+1));

2차원 포인터로 2차원 배열 형태를 만들 때는 이렇게 하면 안 됩니다.

2차원 포인터 list는 list[0]도 char *이고, list[1]도 char *이고, list[2]도 char *... 인 형태를 가집니다.

그러면 list에 할당되어야 하는 메모리의 크기는 char *형이 N개 들어갈 만큼이어야 합니다. 즉, sizeof(char *) * N이라고 해야 맞습니다.

채점 환경에서의 포인터 크기가 8바이트라는 점을 생각하면, N이 3일 때 필요한 바이트 수는 24바이트인데, 기존 코드에서는 12바이트밖에 할당이 안 되는 것을 볼 수 있습니다. 할당된 메모리 범위를 초과하기 때문에 어떤 일이 벌어질지 알 수 없습니다.

joony94   6년 전

해결되었네요! 감사합니다!!

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