평범한 이야기들

[C]C언어 free 함수에 대해서 ㅡ 본문

평범한 개발 이야기/ETC

[C]C언어 free 함수에 대해서 ㅡ

songsariya 2008. 8. 14. 22:14
728x90
 뭐랄까 누군가의 지적으로 다시 한번 생각해본 free함수였다.

나의오류는 포인터의 포인터형 변수와 함께 동적메모리 할당을 하는거였다.

ex)
matrix = (int **)malloc(n * sizeof(int*));

for(i = 0;i < n; i++){
  matrix[i] = (int*)malloc(n * sizeof(int));
 }

이러면 예상할 수 있듯이 2차월 배열처럼 만들어지며 2차원 배열처럼 접근이 가능하다.

프로그램이 종료가 된다면 동적메모리는 free함수로 메모리 해제를 시켜준다.

바로 이부분에서 나의 오류가 시작된거 같다.

저 예로 동적메모리를 할당하고 해제할때

ex) free(matrix);

라고 했다.

내 생각에서는 이렇게 하면 다 메모리 해제를 하겠구나 했지만

프로그램상에서는 아니였던거 같다.

그래서 확인을 하는 프로그램을 대충 만들어봤다.

프로그램은 대충 이렇게 돌아간다.

1. 맨 처음 예와 같이 동적메모리를 할당한다(2차원 배열처럼만든다.)
2. 포인터의포인터형 변수를 만들어 위 동적메모리의 주소를 저장한다.
3. 2번과 마찬가지로 같은 형 변수를 만들어 같은 주소를 저장한다.
4. 나의 오류를 확인하기 위해 먼저 첫 변수에 있는 몇개의 주소를 다른포인터형에다 저장.
5. free() 함수를 써서 메모리 해제
6. 주소를 저장한 변수를 출력. 같은 값이 들어있다면 메모리가 해제 안된것이라고 판단.


소스코드



실행결과

지저분한 소스코드는 언제나 내가 부족한것을 그대로 보여주는거 같다 ㅠ
아직 나는.. 모른는 것들 투성.
빨리 배워나가자. 공부해가자.-
다시 한번 그분께 감사드립니다.
728x90
Comments