Free void pointer
Q. void *로 참조된 배열 혹은 구조체를 Free 하는 것은 괜찮을까?
A. Malloc과 Free는 항상 void* 를 취하므로 void* 포인터 참조된 것을 해제 하는 것은 자연스러운 일이다.
즉, Free는 void*를 취한다(take).
void ** 사용법
void**는 포인터의 포인터이다. 아래의 예시에 따르면 자료형을 알수 없는(some_type_t) 배열을 참조할 때,
해당 배열을 (void *)로 캐스팅 한 후에, (void **)형인 array로 아래와 같이 접근할 수 있겠다.
some_type_t 배열이 2차원 배열이라면, void** array 를 이용해 행(row) 접근을 한다고 볼 수도 있겠다.
void** array;
int arrayLen = 10;
array = (void**)malloc(arrayLen * sizeof(void*));
some_type_t* some_object_ptr;
// The following two assignment are equivalent since in C,
// array[index] <=> *(array + index)
array[index] = (void*)some_object_ptr;
*(array + index) = (void*)some_object_ptr;
[1] https://stackoverflow.com/questions/2182103/is-it-ok-to-free-void
[2] https://stackoverflow.com/questions/9040818/how-to-use-void-pointer-correctly
[3] https://stackoverflow.com/questions/16124045/pointer-of-void-array/16125517
반응형
'프로그래밍 언어 > C, C++' 카테고리의 다른 글
C++ 파일 입출력 정리 (1) | 2022.02.14 |
---|---|
Unit testing 이란 (0) | 2022.02.13 |
Two pointer as argument (0) | 2021.08.02 |
서식 지정자 및 출력 포맷 (0) | 2021.02.04 |
Trouble Shooting (0) | 2021.01.28 |