void free(void* p);
매개변수(인자)
void* p = 할당받은 주소 (이상한 값을 넣었을 때의 결과가 정의되지 않음)
반환값(리턴값)
* 없엉
설명
* 이상한 값을 넣어면 = 위험함
* 이미 해제된 주소을 넣으면 = 위험함
* NULL을 넣으면 = ㄱㅊ 그냥 넘어감
*안전한 코딩을 위해 free 이후 포인터를 초기화해준다.
free 함수는 어떻게 메모리의 크기를 알고 해제할까?
* 매개변수에 주소값들어가는데 메모리의 크기를 어떻게 알고 알맞은 크기를 해제하는 것일까?
주의! 이 설명은 구현마다 다를 수 있습니다!
* 할당 함수는 사실 원하는 size보다 더 큰 크기를 잡는다.
더 큰 크기는 무엇을 위해 잡는가?
-> 할당한 메모리의 정보를 저장하기 위해(예= 크기)
<malloc(size);>
정보 | 반환되는 주소 | ... | ... | ... | ... | ... |
* 반환되는 주소 앞 부분에 할당받은 메모리의 정보를 저장하는 공간이 있다.
* free 함수는 매개변수로 받은 주소의 앞부분을 가지고 크기를 알아내고 메모리를 해제한다.
귀여운 그림은 쭐어님이 그리셨습니다.
반응형
'C' 카테고리의 다른 글
동적 메모리 할당에 관한 규칙, 권장 (0) | 2020.12.30 |
---|---|
memcmp 함수 (0) | 2020.12.29 |
realloc 함수와 memcpy 함수 (0) | 2020.12.27 |
memset 함수 (0) | 2020.12.26 |
malloc 함수, calloc 함수 (0) | 2020.12.24 |