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년 전
예시 나온것도 잘 나오고 답은 잘 나오는데 런타임 에러가 뜨네요ㅠ 왜 이런 걸까요??