よくある質問(FAQ)

シミュレーション実行中に「Invalid address found [code = 18] (pc=********)」エラーが発生しました。

シミュレーションエラーの回避策について

質問

シミュレーション実行中に下記のエラーが発生して、シミュレーションが停止します。エラーの発生原因を教えてください。

Invalid address found [code = 18] (pc=XXXXXXXX)
%SYSTEMG-E-SEM, stopped simulation (status code = 12h)
`MEM::XXXXXXXX'

回答

本エラーは、変数へ割り付けられたアドレスが境界違反のとき発生します。(アドレスの境界制限の無いマイコンの場合は発生しません)
また、書き込み禁止領域 (アドレス空間)へ書き込みを行ったとき発生します。
発生原因としては2つのケースが考えられます

例1)「char」型の変数のアドレスを「long」型のポインタにキャストして代入したとき
char a[4];
long *p;

p = (long *)&a[1];
*p = 1;  // ★エラー発生

※ポインタ変数”p”には、"a[1]"のアドレス(奇数アドレス)が入ります。
(ポインタ変数"p"は「long」型のため、ポインタのアドレスは4バイト境界でないと、本エラーが発生します)

例2) 定数「const宣言」へ ポインタを介して代入したとき
const long a;
long *p;

p = (long *)&a;
*p = 1;  // ★エラー発生