[[프로그래밍_NOTE]]/C , C++

free() 사용시 주의할 점

갑빠돌격기 2008. 8. 25. 11:53

#include<stdio.h>
#include<malloc.h>

int* MyFunc(int* const pInt)
{
 return pInt;
}

void main()
{
 int * pInt1 = (int*)malloc(sizeof(int));
 *pInt1 = 10;
 printf("*pInt1 => %d\n" , *pInt1);

 int * pInt2 = MyFunc(pInt1);
 printf("*pInt2 => %d\n" , *pInt2);

 free(pInt1);
 free(pInt2);
}

//result

사용자 삽입 이미지
















//analysis
사용자 삽입 이미지


그림에서 확일할 수 있듯이
동적으로 heap에 생성된 5000(실제로는 다를 수 있다)번지의 값을
pInt1 , pInt2가 공유하는 방식의 코드이다.
실제로 printf()함수를 통해 출력시에 당연히 각각 10의 값을 출력하지만
free()함수를 2번 호출하게 되면 이미 해제된 메모리를 또 해제하려고 하기에 오류가 발생한다.