본문 바로가기

프로그래밍 언어/C, C++

void 포인터 용법 정리

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