반응형
free(3)
#include <stdlib.h>
void free(void *ptr);
malloc(3) / calloc(3) / realloc(3) 등으로 할당한 메모리를 해제합니다. 할당된 메모리를 이미 free(ptr)했는 데, 또 free(ptr)을 호출하는 경우에는 잘못된 메모리에 대한 acess로 인하여 비정상적으로 종료될 수 있습니다. ptr이 NULL이라면 free(ptr)은 아무런 동작을 하지 않고 return합니다. 따라서 free(ptr); 후에는 ptr = NULL; 처럼 NULL로 초기화를 해두면 잘못하여 두 번 free()가 일어나더라도 아무런 문제를 발생시키지 않습니다.
free(ptr);
ptr = NULL; // ptr의 메모리가 해제되었다면 NULL로 초기화함
......
free(ptr); // 아무런 작업이 안일어남
파라미터
ptr
- malloc(3) / calloc(3) / realloc(3) 등으로 할당된 메모리 주소
RETURN
없음
활용 예제
Sample
#include <stdio.h>
#include <stdlib.h>
......
int main(int argc, char *argv[])
{
char *ptr;
int size;
......
/* memory를 할당합니다. */
if((ptr = (char *)malloc(size)) == NULL) {
fprintf(stderr, "malloc error.\n");
return 1;
}
......
/* memory를 해제합니다. */
free(ptr);
/*
free후에는 될 수 있으면 NULL을 대입하여 혹시라도 두 번 free하는 것을 방지하는 것이 좋습니다.
free한 메모리에 대해서 또 free하게 되면 coredump 비정상 종료될 수 있습니다.
*/
ptr = NULL;
return 0;
}
see also : memory 관련 함수
반응형
'C언어 header > stdlib.h' 카테고리의 다른 글
realpath(3) - 절대 path로 변환하는 함수 (0) | 2019.09.25 |
---|---|
realloc(3) - 메모리의 크기를 재할당하기 (3) | 2019.09.25 |
calloc(3) - 메모리 할당 및 초기화 수행 (0) | 2019.09.24 |
malloc(3) - heap memory 할당하기 (0) | 2019.09.24 |
exit(3) - 프로세스 종료하기 (0) | 2019.09.24 |