0

ポインターのサイズが変化することを考慮して、次のキャストを行うことはどのくらい安全でしょうか? (32/64 ビット) プログラムの不正な動作につながる可能性はありますか?

#define APL 1
#define GRP 2

void *fruits[][2] = {
    {"Apples", (void *) APL},
    {"Grapes", (void *) GRP},
};
4

1 に答える 1

0

ポインターのサイズが異なることを考慮して?

それは何の役割も果たしません。標準では、整数をポインターにキャストすることが許可されています。

しかし、キャストの結果は (0 に評価される定数式を除いて) 実装定義であり、おそらく操作や読み取りさえ許可されているメモリへのポインターではありません。

プログラムの不正な動作につながる可能性はありますか?

これらのポインターを使用すると (たとえば、他のポインター型にキャストし、結果を逆参照する)、未定義の動作につながり、さまざまな種類の悪い動作が発生する可能性があります。

于 2012-11-27T03:32:07.903 に答える