私は次の構造体を持っています:
struct foo
{
int a;
char b;
};
これはメモリに格納され、それへのポインタはアラインされていない可能性があります (奇数アドレス)。
それで、これは安全ですか?:
const struct foo a = *((struct foo*)char_ptr);
ソース構造体の整数メンバーが奇数アドレスになる可能性があるため、心配しています。一部のシステムでは、奇数アドレスから (マルチバイト) 整数を読み取ると問題が発生します。
編集:
の使用に関するトピック外のコメントを避けるために、コードからconst
a を削除しました。const
(const ポインターを非 const ポインターにキャストすることはありません。この場合でも、問題は発生しません)
さらに、問題のコンテキストについて: この種の構造は、プロトコル フレームの一部です。また、フレーム内の任意のオフセットにすることができます。実際のコードでは、構造体に__attribute__((packed))
属性があります。しかし、それはおそらく答えを変えませんか?
とにかく、問題を解決するためにmemcopy
and non-constを使用できました。a
しかし、よりエレガントな方法のように見えるので(安全であれば)、割り当てを使用したいと思います。