C언어에서 동적할당을 할 때, 동적할당이 제대로 되지 않아서 NULL포인터를 반환하거나, free() 함수를 이미 호출한 뒤에 또 free() 함수를 호출할 때가 있습니다. 이럴 때 NULL포인터를 free() 함수 매개변수에 넣어도 되는지 아니면 따로 조건문을 실행해서 NULL포인터가 아니면 free() 함수를 실행해야 하는지( if (ptr != NULL) free(ptr); ) free() 함수와 다른 글들을 통해서 설명하겠습니다.
free() 함수
void free(void* ptr);
free() 함수는 malloc(), calloc()과 같이 동적할당된 메모리를 해제시켜 주는 함수입니다. free() 함수의 매개변수인 ptr이 이전에 동적할당받은 포인터의 값과 다른 경우에는 free() 함수의 동작은 표준에서 정의되지 않습니다.(undefined behavior로 해서는 안 되는 행동입니다.) 그리고 free() 함수에 ptr함수가 NULL포인터라면 이 함수는 동작하지 않습니다.
free(NULL);
즉, free(NULL); 코드는 어차피 동작하지 않는 코드이기에 굳이 if (ptr != NULL) free(ptr);과 같은 코드를 작성할 필요가 없습니다.
'C언어 > C언어 기초' 카테고리의 다른 글
fscanf 함수의 리턴값 (0) | 2023.04.15 |
---|
댓글