38.3
, 김 현우님이 작성int main()
{
int **m = malloc(sizeof(int *) * 3);
for (int i = 0; i < 3; i++)
{
m[i] = malloc(sizeof(int) * 4);
}
m[0][0] = 1;
printf("%d\n", m[0][0]);
for (int i = 0; i < 3; i++)
{
free(m[i]);
}
free(m);
return 0;
}
이코드에서 포인터해제를할때 free(m[i])를 할경우 2중배열의 가로를 해제하는것같은데 가로 포인터를 해제를하면 2중배열이 다해제되는게 아닌가요? 아래구문에서 free(m)으로 세로를 또해제한다고하는데 이해가 가질않습니다...
free(m[i])를 하면 m[0][0]~~~[3] ,[1][0]~~[3],[2][0]~[3] 이런식으로 다해제되는게 아닌건가요?
회신: 38.3
, 도장_ 관리자님이 작성메모리 할당이 그림 38-3처럼 두 단계에 걸쳐서 진행됩니다.
해제도 반대로 두 단계에 걸쳐서 해야 합니다.
free(m[i])만 하면 중간 단계만 해제되고, 나머지는 해제되지 않고 접근할 방법이 사라져서 메모리 누수가 됩니다.