BREW(Binary Runtime Environment for Wireless) 6
■ このスレッドは過去ログ倉庫に格納されています
0327デフォルトの名無しさん
2005/10/26(水) 20:59:39int v = 0;
char dat[] = { 0x11 , 0x22 , 0x33 , 0x44 , 0x55 , 0x66 , 0x77 , 0x88 };
v = *( ( int* )( dat + 1 ) );
DBGPRINTF( "align :%x" , v );
こんなコードを動かした時に具体的にどうなるかは
エミュ v == 0x55443322
W21CA v == 0x11443322
W21T 止まる
となる。だから314が言ってる
>自身でも2社の端末で試してみましたが正しく動いていました。
ってのはCPUが止まらないだけで、値は無茶苦茶な物が入って偶然動いてるだけだと思われる
別の何かのときに止まってハマルね
対策は 317や319の方法できっちり書くのもいいが、
BREW向けの対策で済ませたいなら(現実的に別OSに流用なんてしないだろ?)
v = *( ( __packed int* )( dat + 1 ) );
と書くのが一番手っ取り早く安全
これでエミュ、W21CA、W21T で v== 0x55443322 と正しくなった上で止まらずに動く
■ このスレッドは過去ログ倉庫に格納されています