Re: 構造体をポィンタで使用する とエラーとなる
In article <421E3DE1.B95AAA99@ht.sakura.ne.jp>,
IIJIMA Hiromitsu <delmonta@ht.sakura.ne.jp> writes:
> いいじまです。
>
> > > 想定されているアライン境界でしかメモリアクセスを許さない
> > > アーキテクチャでは致命的な問題につながる可能性もありそうです。
> >
> > PS2 (Linux)が、そういうアーキテクチャだったりします。なんだ
> > けど、これがcastしまくりなライブラリがついていたりするんです。
> > もう、楽しくってしょうがないです。
>
> PS2にかぎらず、無印68000、PowerPC、SPARCあたりもアーキテクチャとしては
> 同様ですね。
>
> サンプルコード
>
> #include<stdio.h>
>
> union hoge
> {
> char c[5];
> long L;
> } a = {1,2,3,4,5};
>
> int main()
> {
> printf("%8lX\n",*(long*)&a.c[1]);
> }
>
> Mac や SPARC では Segmentation fault になります。
> x86 は黙って 05040302 という結果を出します。
x86でも8088以外なら、「ちょっと黙って」結果を出しているわけですね。
一応ペナルティがありますんで。
--
___ わしは、山吹色のかすてーらが大好きでのぅ
[[o o]] ふぉっふぉっふぉ
'J' 森下 お代官様 MaNMOS 英夫@ステラクラフト
PGP Finger = CD EA D5 A8 AD B2 FE 7D 02 74 87 52 7C B7 39 37
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735