#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int size;
scanf("%d", &size);
int** matrix = malloc(sizeof(int*) * size); //세로 할당
for (int i = 0; i < size; i++) {
matrix[i] = malloc(sizeof(int) * size); //가로 할당
}
for (int i = 0; i < size; i++) { //세로 반복
for (int j = 0; j < size; j++) { //가로 반복
if (i == j)
matrix[i][j] = 1; //1또는 0저장
else
matrix[i][j] = 0;
}
}
for (int i = 0; i < size; i++) { //세로 반복
for (int j = 0; j < size; j++) //가로 반복
printf("%d ", matrix[i][j]); //출력
printf("\n");
}
for (int i = 0; i < size; i++)
free(matrix[i]); //2차원배열 가로 메모리 해제
free(matrix); //2차원배열 세로 메모리 해제
return 0;
}
이 코드에서 할당한 메모리를 해제하지 않아도 작동에는 문제가 없는데 꼭 해제 해야하는 이유가있나요??
for (int i = 0; i < size; i++)
free(matrix[i]); //2차원배열 가로 메모리 해제
free(matrix); //2차원배열 세로 메모리 해제
이 부분 입니다!
답변 감사합니다//
main 함수가 종료되면 프로그램이 종료됩니다.
프로그램이 종료되면 프로그램이 사용한 메모리는 모두 반환되니까 문제가 없습니다.
그러나 malloc을 사용한 함수가 funcA이고, 이 함수가 free로 메모리를 해제하지 않으면 funcA 함수가 호출될 때마다 메모리 누수가 발생합니다. 즉, 문제가 발생합니다.
malloc을 사용하면 반드시 사용한 메모리는 free로 해제해야 합니다.