2012-05-11 9 views
2

をcharに空ポインタをキャストすることが安全です:は、このようにキャストしても安全かどう思っポインタのポインタ

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

ボイドが**罰金*使用されるか、または無効であるべきか?これは問題のない私の箱のカップルで動作しますが、それが特定のシステムで問題を引き起こすかどうか疑問に思っていました。

+0

なぜここに型情報を捨てるのですか?それは正当な理由のためにそこにあります。 –

答えて

6

キャストは常に安全です。逆参照は、ポインタが有効である限り安全です。 void **を使用する唯一のケースは、逆参照してvoid *になる予定のときです。

ただし、ポインタ演算を行わない限り、実際には問題にはなりません。 http://codepad.org/UcZUA0ULに表示されているように、void*またはvoid **を使用しても問題なく動作します。実際にポインタを使用する前に、それをchar **にキャストしようとしています。したがって、逆参照されることはありません。void -ishです。

3

元のポインタがchar **の場合は、void*からのキャスト(以降の使用)。

void**を使用しないでください。

関連する問題