2012-05-11 3 views
2

를 숯불에 무효 포인터를 캐스팅 안전한가요 :그것은 그냥 이렇게 캐스팅 안전 궁금 포인터 포인터

char **cpp; 
// ... allocation and what not 
void *vp = (void *)cpp; 
// ... 
cpp = (char **)vp; 

이 무효가 ** 사용해야 또는 무효 * 괜찮지? 이 문제는 두 상자의 문제없이 해결되지만 특정 시스템에서 문제가 발생할 수 있는지 궁금해하고 있습니다.

+0

왜 여기에 정보를 버리시겠습니까? 좋은 이유가 있습니다. –

답변

6

캐스트는 항상 안전하며 역 참조하면 포인터가 유효하면 안전합니다. void **을 사용하는 유일한 경우는 역 참조 할 때 void *이 될 때입니다.

그러나 포인터 연산을 수행하지 않으면 실제로 문제가되지 않습니다. http://codepad.org/UcZUA0UL에서 볼 수 있듯이 또는 void **을 사용하면 상관 없습니다. 포인터를 실제로 사용하기 전에 어쨌든 char **으로 캐스팅 할 것입니다. 따라서 void -ish 인 동안 참조가 해제되지 않습니다.

3

원래의 포인터가 char ** 인 경우 에서 캐스팅 (및 이후 사용).

void**을 사용하지 않아야합니다.