実機でのメモリ アクセス中にシステムがダウンする原因を教えてください。
以下のようなメモリ アクセスを実機で行った場合、ARM の仕様上エラーが発生し、 ARM 自身の処理が停止します。
uint16 n[2]; uint16* p; // 奇数番地のアドレス位置に移動し、 // アラインをまたぐデータの転送を行います。 p = (uint16*)((char*)n + 1); *p = 0;
このコードでは、uint16 型の配列で連続したメモリ空間を確保し、 char 型分だけアドレス位置をずらしています。 そのアドレス位置から uint16 型のデータを転送しようとするとアラインをまたいでしまうため、 ARM の仕様上エラーが発生します。
その他にも、以下のような場合にシステムがダウンします。
- MALLOC 関数で取得したポインタに NULL チェックをせずにアクセスした場合など、 NULL ポインタへアクセスした場合。
- 配列に対して範囲外のインデックスを指定してアクセスした場合など、 無効なアドレスへアクセスした場合。