denshikobo’s blog

PICプログラミングやPCの操作で感じた日々の由無し事を綴ります

地雷を踏んだ

構造体へのポインタ配列の表示を確認していて、とんでもない地雷を踏んでしまいました。orz

 

MPLAB-Xの構造体へのポインタ配列の表示方法はこんな感じでした。

 f:id:denshikobo:20170830115955p:plain

(1)展開前はtest_arrayがTest*[16]タイプでAddressが0x300という表示

(2)展開するとtest_array[0]からtest_array[15]まで縦に表示

(3)配列要素を展開するとTest構造体のメンバを表示

DWARFのデータ構造をそのまま辿っているようです。ふむ、これで良いのか・・・

 

ん!

異変に気付きました。test_array[0]の値が0?

test_array[0]の指し示す構造体メンバが0と7d?

そしてさらにおかしなことが・・・

test_arra[0]にtest0構造体のアドレスをセットして・・・あれ0まま!

f:id:denshikobo:20170830120023p:plain

 

f:id:denshikobo:20170830120017p:plain

test_arra[1]にtest1構造体のアドレスをセットしても・・・0まま!

 さらにステップ実行すると・・・えっ!

f:id:denshikobo:20170830120011p:plain

ここに飛ぶ???

(暫く錯乱状態に陥ったのですが割愛します)

 

原因はこれ(↓)でした。

struct Test *test_array[16] @0x300;

 

ポインタ変数が1バイトのときと2バイトになるときの条件を調べようとして、test_arrayの配置を0x300に設定して、この異変に遭遇しました。

f:id:denshikobo:20170830122828p:plainこんな所に変数を配置する奴(<==愚か者)がいけない

 

XC8って、煩く文句をつけるくせに、こういうドジは黙ってスルーするイケズです。