hixの日記: 境界関係を大いに語る
日記 by
hix
エンディアン嘘付かない...ではなく、アライメント境界に引っかかるのである。
任意の個数の終端付き文字列の連続を複数個連結して格納するという使い方をしていて、例えばこんな感じ。
任意の個数の終端付き文字列の連続を複数個連結して格納するという使い方をしていて、例えばこんな感じ。
19, "str1-1", "str1-2", '\0', 29, "str2-1", "string2-2", "str2-3", '\0', 0
19とか、29とか言うのは、size_t型で、各固まりのバイト長(数値自身のバイト長も含む)を表す。
x86系なら問題ないが、ARMだとダメ。最初の19は問題ないけど、次の29が奇数バイトから始まるから。
あと、malloc()を拡張していて、メモリブロックの前後に破壊検知用の構造体を置いていたんだけど、そこにも unsigned int のメンバがあったらダメだった。
確保するメモリサイズが偶数なら問題無いが、奇数だと落ちる。タチ悪い(いやまぁ、いきなり奇数バイトを確保したんで発見は早かったが)。
泣きながら改修中。
回避方法その一。
...ARMは嫌いだ。
境界関係を大いに語る More ログイン